继承
extends关键词
形式:
public class person{类体}
public Student extends person{类体}
组合
把一个类作为另一个类的成员,即完成了组合
继承的作用
如果有两个类的耦合度非常高,重复定义类似的类就会导致代码非常臃肿
而如果能在两个不同的类中找到其共同点和不同点,使用一个相同的类把共同点抽象成一个类,再把相同点继承下来,(不严谨的说)不同点再分别抽象导入,就能大大减少代码的重复度。
继承的类型
图片转自https://www.runoob.com/java/java-inheritance.html
与C++不同的是:
- java中没有共有继承和私有继承等概念,所有继承都是public继承。
- java中不存在多继承(除非用implement)
super关键字
用super关键字来访问父类,与this有些类似,但这样的比较并不恰当,super不是一个对象的引用,不能将super赋给另一个对象变量,他只是用来调用父类方法的关键字
构造器
在生成子类对象时,会先调用父类的构造器,再调用子类的构造器。并且父类的构造器默认在子类构造器的第一行
public class Student extends Person{
public Student(){
super();//父类构造器,默认被隐藏,但在执行代码时会执行。
System.out.println("子类构造器")
}
}
如果没有特殊说明,子类对象生成时会调用无参父类构造器。
如果想要调用有参构造则
public class Student extends Person{
public Student(){
super(/*参数*/);
System.out.println("子类构造器")
}
}
来调用有参构造。
若父类没有无参构造器,而子类的构造器中又没有对有参父类构造器的调用,则java会报错。