什么是继承
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。
多个类可以称为子类,单独这个类称为父类。
子类可以直接访问父类中的非私有的属性和行为。
通过 extends 关键字让类与类之间产生继承关系。
class Dog extends Animal{ } //Dog是子类,Animal是父类
继承的好处是提高代码的复用性。
让类与类之间产生了关系,是多态的前提。
继承的特点
1.Java只支持单继承,不支持多继承。打个比方,一个人只能有一个父类,不可以有多个父类。
class Dog extends Animal{ } //ok
class Dog extends Animal1,Animal2{ } //error
2.Java支持多重继承(继承体系)。
class Animal{ }
class Dog extends Animal{ }
class HaShiQi extends Dog{ }
使用继承时的注意事项
如果类之间存在着:is a 的关系(如上述“Dog is a Animal”),就可以考虑使用继承。
super和this有的区别
super是一个关键字,代表父类的存储空间标识。(可以理解为父亲的引用)
super和this的用法相似。
this代表对象的引用(谁调用就代表谁);
super代表当前子类对父类的引用。
使用场景
当子父类出现同名成员时,可以用super进行区分。
子类要调用父类构造函数时,可以使用super语句。
1.成员变量
this.变量 //本类的
super.变量 //父类的
2.构造方法
this(...) //本类的
super(...) //父类的
3.成员方法
this.方法名() //本类的
super.方法名() //父类的
super();和this();都是在构造函数的第一行,不能同时出现。
方法的重写
子类中出现与父类一模一样的方法时(除了权限修饰符,权限修饰符大于等于不包括private,返回值类型,方法名和参数列表相同),会出现覆盖操作,也就是重写。
父类私有方法,子类看不到,因此父类私有方法的重写也就无从谈起。
重写注意事项:
1.重写时,子类方法权限一定要大于等于父类方法权限。
2.静态只能重写静态。
重写的使用场景:
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以复写父类中的方法,这样,既沿袭了父类的功能,又定义了子类特有的内容。
方法重写和重载的区别
方法的重写用在子类方法与父类方法一模一样时,除权限修饰符,返回值类型,方法名和参数列表都是相同的。
重载用在同一个类中各方法方法名相同,参数列表不同(与返回值类型没有关系)的情况。
子父类中构造方法的用法:
子类的初始化过程中,首先回去执行父类的初始化动作。因为子类的构造方法中默认有一个super()。子类要使用父类的成员变量,这个初始化,必须在子类初始化之前完成。所以,子类的初始化过程中,会先执行父类的初始化。
静态代码块、构造代码块,构造方法的执行顺序:
父类静态代码块→子类静态代码块→父类构造代码块→父类构造方法→子类构造代码块→子类构造方法