Java继承学习
-
继承中有两个核心类,一个是父类,一个是子类,子类继承父类,然后就可以拥有父类非私有化的属性和方法,并且可以在父类的基础上自由的扩充代码。
-
继承的操作逻辑,子类的声明上使用extends 父类名称。(注意:在Java中一个子类只能继承一个父亲,一个父类可以有很多子类Java的单继承原则)
-
虽然Java只支持单继承,但是Java可以进行继承传递
-
继承属性的问题
- 子类继承父类之后,子类是可以拥有和父类同名的属性的。
- 子类能不能拥有父类的同名属性,取决于封装性的权限控制
-
继承方法的问题
-
子类可以继承父类的非私有化方法,但是在有些情况下,子类觉得父类的方法并不能完全表达子类的状态,但是方法逻辑是一样的。
-
子类可以将父类的方法给重写了,将方法体换成符合子类逻辑的代码
-
如果在子类中对父类方法进行了方法重写,那么此时子类会拥有一个和父类几乎一摸一样的方法。那么在子类其他方法中调用这个方法的时候,我们可以通过this.调用子类的方法 通过super。调用父类的方法。
-
方法重写的规则如下
序号 必备条件:无法重写父亲的私有化方法 1 保证两个类之间有父子关系 2 保证方法名和参数列表必须一致 3 子类重写了父类之后,必须在重写方法上加一个@Override标注 4 子类重写的方法必须和父类的方法的返回值类型保持一致 5 子类重写的方法的权限控制力度必须小于父类方法的控制权限 6 子类抛出的异常不同大于父类的异常
-
-
继承构造器的问题
- 子类继承父类之后,可以使用父类的非私有化属性和方法。但是有一个问题,属性和方法必须得有父类的对象才能调用。
子类中我们没有创建父类对象,我们也可以使用属性和方法,是因为Java在创建子类对象的时候会默认创建父类对象,。并且将父类对象起名为super - 在子类构造器中,如果有n个子类构造器,那么必须最少有一个子类构造器调用了父类构造器创建父类对象。同时其他n-1个构造器必须间接或者是直接的调用父类的构造器
- 子类调用父类构造器,必须声明子类构造器的首行,如果子类构造器首行没有调用任何的东西,默认会调用父类的无参构造器,如果首行已经调用了本类其他构造器或者是其他父类构造器 ,那么首行就不会再自动调用父类的无参构造器。
- 在一个类中,如果有5个构造器,那么最少有一个构造器内部使用super(参数列表)的形式调用了父类的构造器|
最多只能有4个构造器使用this(参数列表的形式)调用了本类其他构造器,而且调用了本类构造器的构造器必须简介的调用父类构造器 目的均是为了在创建子类对象的时候创建一个父类对象的引用
- 子类继承父类之后,可以使用父类的非私有化属性和方法。但是有一个问题,属性和方法必须得有父类的对象才能调用。
-
继承的父类问题
- 在Java当中,如果我们创建了一个Java类,但是我们并没有显示的声明Java类继承了某个类,那么Java会让当前这个类默认继承Object类
- Object类是Java所有类的顶尖父类。java.lang.Object
- Son继承自Father类 Father类没有声明任何继承关系,那么默认Father类继承自Object类
- 在Java中 任何一个类最后都会直接或者间接的继承Object类
-
继承的代码块的问题
- 代码块是在构造方法执行之前先执行代码块
- 如果子类和父类中均有非static修饰的代码块,那么执行的时候执行顺序如下:
父类的代码块—>父类的构造器---->子类的代码块---->子类的构造器
-
final关键字
- 修饰变量(final修饰的变量不可被更改,不能被重新赋值了)
- 成员变量
- 局部变量
- 修饰方法
- 代表方法是最终方法 不可被子类重写
- 修饰类(外部类/内部类)
- 代表类是一个最终类,不能被继承
- 修饰变量(final修饰的变量不可被更改,不能被重新赋值了)