继承
定义
继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模
比如说Person是父类,YellowPerson,WhitePerson,BlackPerson就是子类
extends的意思是”扩展“。子类是父类的扩展,子类可以继承父类所有的属性和方法,并且可以拥有自己的属性和方法
JAVA中类只有单继承,没有多继承,一个父类可以有多个子类,但是一个子类只能有一个父类
父类中private修饰的属性和方法,子类不能继承
继承是类和类之间的一种关系,除此之外,类和类之间的关系还有依赖,组合,聚合等
继承关系的两个类,一个为子类(派生类),一个为父类(基类),子类继承父类,使用关键字extends来表示
子类和父类之间,从意义上讲应该具有”is a“的关系
object类
super
方法重写
父类中priavte修饰的属性,子类虽然不能继承,但是可以根据父类中的get和set方法来操作这个属性
Object类
在Java中都直接或间接继承Object类
快捷键ctrl+H就可以看到继承关系
这里我们可以看到我们定义的父类extendsF3还有一个父类是Object类
super
super可以和this比较学习
这里我们可以看到,我在子类中写了一个和父类名字一样的方法,@Override覆盖了父类的方法,在子类中调用属性和方法时都是优先调用子类本身的方法,print()和this.print()都输出的是b,而super是使用的属性或方法,所以输出的为a
super();这个代码是隐藏代码
是在子类无参构造器的第一行
public extendsZ3(){ super();//这个是隐藏的 }
也就是说调用子类的无参构造器是先调用父类无参构造器
如果父类没有无参构造器那么在默认情况下子类也不能使用无参构造器,如果子类要使用无参构造器,那么就需要在无参构器的第一句super(实参);
所以如果我们在父类中使用了有参构造器之后,一般我们需要手动去写无参构造器,以防止出现子类中不能使用无参构造器
总结(super)
注意点
1.super调用父类的构造方法,必须在构造方法的第一个
2.super必须只能出现在子类的方法或者构造方法中
3.super和this在构造方法中只能出现一个
比较this
代表的对象不同
this代表当前类的属性或者方法
super代表父类的属性或者方法
前提
this:没有继承也可以使用
super:只能在继承条件下才能使用
构造方法
this();调用本类构造
super();调用父类构造
方法的重写(覆盖)
重写都是方法的重写,和属性无关
重写只和非静态方法有关,和静态方法无关
这里的extendsF3 f = new extendZ3(); 父类的引用可以指向子类
这里父类的引用虽然指向子类,但是父类调用的静态方法输出的结果依旧是父类静态方法的值,所以静态方法不能进行重写
这里的@Override是覆盖重写的意思 @是有功能的注释
这里父类的引用指向子类,所以父类的引用使用print();是子类print();
这里父类引用指向父类,父类引用使用print();是父类print();
总结(重写)
1.有继承关系,子类重写父类的方法
2.参数列表必须相同(不然就是重载了)
3.修饰符范围可以扩大但不能缩小 private<dafault<protected<public
4.抛出异常的范围可以被缩小,但不能扩大
Exception>ClassNotFoundException
5.重写,子类的方法和父类必需一直,方法体不同
6.为什么重写
(1).父类的功能,子类不一定需要,或者不一定满足
仅作为学习记录