在程序中复用一些已经定义完善的类不仅可以减少软件开发周期,也可以提高软件的可维护性和可拓展性。子类可以继承父类原有的属性和方法,也可以增加原来父类所不具备的属性和方法,或者直接重写父类中的某些方法。在Java中用extends关键字来标识两个类的继承关系,如:
public class Pad extends Computer(){
………………….
}
这表示Pad类继承Computer类,Pad是子类,Computer是父类。

子类可以继承父类原有的属性和方法

image.png
运行结果:
image.png

子类可以增加父类不具备的属性和方法

image.png
image.png
运行结果:
image.png

子类可以重写父类的方法

image.png
image.png
运行结果:
image.png

super关键字

super关键字的作用:
作用一:在子类的构造方法中,使用super关键字调用父类构造方法子类在创建实例对象时,父类的构造函数必须要先执行,然后才执行子类的构造方法来创建子类的实例化对象,通过代码来证明:
image.png
image.png
通过创建一个son类的实例化对象我们可以看到先调用了father类的构造方法,然后再调用son类的构造方法来创建一个son类实例的。因此,再写子类的构造方法时,第一行代码一定是“super(参数);”,如果父类的构造方法是无参的话就是“super();”。但有时候没有super关键字编译器也没有报错,这是因为编译器默认生成一个“super();”语句,此时调用的是父类的无参构造方法(如下图所示),这也仅限于父类的无参构造方法,因此建议都写上super语句。
image.png
image.png

作用二:在子类的成员方法中,使用super关键字调用父类成员变量(private修饰的方法除外)
image.png
可以看到,虽然父类和子类中都存在number这一变量,但其实这两个变量仅仅只是名字相同而已,它们没有什么特别的关系,想要再子类的成员方法里面调用父类的属性,就必须使用super关键字。

作用三:在子类的成员方法中,使用super关键字调用父类成员方法
image.png

注意事项

Java语言中,一个类只可以有一个父类;但一个父类可以有多个子类。
当子类和父类的属性和方法同名时,子类不仅会覆盖父类的方法(即子类重写父类的方法),还会覆盖父类的属性。
image.png
可以看到,这样是无法通过编译的;对于一个类想要继承多个父类的成员和方法,可以采用多重继承的方法。
image.png
可以看到,father_2是father_1的父类,father_1是son的父类,son对象t1不仅可以调用show_1()又可以调用show_2(),说明son类不仅继承了father_1的方法,还继承了father_2的方法。在观察,发现t1.str打印时father_1中的str而不是father_2中的str,这是因为father_1时father_2的子类,father_1的属性str和father_2的属性str同名,所以father_2的属性str被father_1的属性str覆盖掉了,所以t1.str调用的时father_1的str而不是father_2的str;然后把father_1中的str改成str1,运行发现这回打印的是father_2中的str了,这就验证了上述说法(如下图所示)。
image.png