Java语言的继承

这里简谈Java语言的三大特性之二——继承。

Java语言的三大特性是循序渐进的、是有顺序性的,应该按照封装-->继承-->多态这样的顺序依次学习

继承的定义

百度百科中这样定义继承:继承是面向对象最显著的一个特性。它是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。

继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。举个通俗易懂的例子:

动物是自然界中某些生物的统称,(初中生物书上也有“界门纲目科属种”),在动物之下,又有许多种类,比如说猫、狗、老虎、狮子等等,这些实体的动物既拥有所有动物的特性,又有自身独有的一些特性,比如老虎头上有个“王”字等等。

可以说继承是类和类之间的一种关系,继承关系的两个类,一个为父类(基类),另一个为子类(派生类)。子类继承父类,使用关键字:extends,子类和父类之间,从意义上来讲应该具有“is a”的关系,例如上述的例子中:Tiger is an animal, Cat is an animal ......

除此之外,类和类之间的关系还有:依赖、组合、聚合等等,需要注意的是,Java中类的继承只有单继承,没有多继承

继承的关键字

extends

extends的意思是“扩展”,具体说就是子类是父类的扩展(即派生类是基类的扩展)。

使用时也比较容易,创建新类时,在类名的后面加上extends,再加上继承的父类名即可:

//父类
public class animal{
   //父类的相关属性及方法
}
//子类
public class tiger extends animal{
   //子类的相关属性及方法
}

继承的代码示例

首先创建一个父类:Animal类

package 继承示例;

public class Animal {
   public void breath(){
       System.out.println("animal can breath......");  //父类方法
  }
}

再创建一个子类:Tiger类,用来继承父类

package 继承示例;

public class Tiger extends Animal {
   public void eatMeat(){
       System.out.println("Tiger will eat meat......");    //子类方法
  }
}

最后创建一个测试主类:test类

package 继承示例;

import java.util.function.ToDoubleBiFunction;

public class test {
   //这是一个测试类
   public static void main(String[] args) {
       Animal am=new Animal();
       am.breath();    //父类对象访问父类方法,没有问题
//       am.eatMeat(); //父类对象访问子类方法,编译报错!表示无法访问到

       System.out.println("============================================");
       Tiger tg=new Tiger();
       tg.breath();    //子类对象访问父类方法,没有问题
       tg.eatMeat();   //子类对象访问子类方法,没有问题
  }
}

测试结果如下:

animal can breath......

=================================

animal can breath......

Tiger will eat meat......

由此可见,继承时,子类可以访问父类和子类的方法,父类只能访问父类的方法。

注意

  • 父类的private方法不能被继承

  • 父类的static方法不能被继承

  • 父类的final方法不能被继承

  • 父类的构造方法不能被继承

  • object类是所有类的父类(祖宗类)

最新文章

  1. 修改Coney主题之侧边栏移位
  2. easyui accordion—手风琴格子始终展开和多个格子展开
  3. Node.js的process模块
  4. aop编程 环绕round
  5. Dynamics CRM 相关资料
  6. iOS 数组字典操作
  7. FileSystemXmlApplicationContext、ClassPathXmlApplicationContext和XmlWebApplicationContext简介
  8. enumerate给列表加索引
  9. python获取当前路径
  10. kubernetes之ingress及ingress controller
  11. Vue学习第一天:Vue.js指令系统
  12. HTTP状态码简单总结
  13. 第一个SpringBoot程序
  14. 浅析requests库响应对象的text和content属性
  15. 38.spiderkeeper的配置
  16. LGP5075【JSOI2012】分零食
  17. ADB用法
  18. 降雨量 HYSBZ - 1067(RMQ)
  19. Java之速记(1) - 小结与疑惑
  20. .Net Core使用OpenXML导出,导入Excel

热门文章

  1. vue.use()方法从源码到使用
  2. Wfuzz使用学习
  3. 轻松扩展机器学习能力:如何在Rancher上安装Kubeflow
  4. P4526 【模板】自适应辛普森法2
  5. linux常用命令---系统辅助命令
  6. js中获取 table节点各tr及td的内容方法
  7. JavaScript事件坐标区别(offset,client,page)
  8. 【Spring】Spring AOP详解(转载)
  9. .Net基础之3——运算符
  10. Centos 安装 Anaconda