继承
一、定义
二、基本使用
1 | class className extend furtherClassName){ |
三、继承的使用细节
子类继承了所有的属性和方法,非私有的属性和方法可以直接在子类中进行访问,但是私有属性和方法不能在子类直接访问,要通过==父类提供==的公共方法去访问。
子类必须调用父类的构造器,完成父类的初始化
在子类的构造器中会有 super
当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的
无参构造器
。如果父类没有提供无参构造器,则必须在子类的构造器中使用super去指定使用父类的哪个构造器完成对父类如果父类中没有构造器,那编译器会自动添加一个空的同名构造器,如果父类中有其他构造器,则编译器不会创建空形参的同名构造器。
则下面这段代码就会报错
1 | public class base { |
java: 无法将类 com.jhfuture.extend.base中的构造器 base应用到给定类型; 需要: java.lang.String 找到: 没有参数 原因: 实际参数列表和形式参数列表长度不同
如果需要指定使用父类的构造器,在子类构造器中使用super()
- 调用无参构造器 —–> super() /什么都不写
- 调用有参构造器 ——> super( parameter)
super在使用时,需要放在==构造器的第一行==(且super只能在构造器中使用)
super()和this()都只能放在构造器第一行,因此这两个方法不能共存在一个构造器
Java所有类都是object类的子类,object是所有类的基类。
父类构造器的调用不限于直接父类!将一直往上追溯到object类(顶级父类)
子类最多只能继承一个父类(指直接继承),即java中是==单继承机制==
- 思考,如何让A类继承B类和C类。
- A继承B–》继承C
不能滥用继承,子类和父类之间必须满足is-a的逻辑关系
- animal
- Cat extents Animal 合理
- Person is Music
- person extend //不合理
- animal