继承
1.基本概念
当多个类都有相同的特征时和行为时,我们可以将这些类中相同的内容提取出来组成公共类,让多个类吸收公共类中的已有特征和行为,而着多个类只需要编写自己独有的特征和行为的方式就叫做继承
复用性:(重复使用)
在java语言中使用extends(扩展)关键字来表示继承
eg: public class Student extends Person
这里就表示Student类继承自Person类
我们将这里的student类叫做:子类,孩子类,派生类
将这里的Person类叫做:父类,基类,超类
使用继承时的注意事项
-
子类可以继承父类的成员变量和成员方法,其中私有成员变量可以继承但不能直接使用,子类不可以继承父类的私有成员方法和构造方法
(原因是:第一:子类不能继承父类的构造方法,因为构造方法名要与类名相同,而子类和父类的类名显然不同,所以子类也就不继承父类的构造方法,第二:私有成员按理来说也不能继承,但是有一个例外就是私有成员变量可以被继承,所以这里的成员方法不是特例也就自然不能被继承,而且私有方法继承下来也没有用,因为子类如果继承了父类的私有方法的话那么开始时私有的成员方法是在父类中被定义的,所以现在的子类就算做类外,自然就不能使用,所以也就干脆不能继承,而刚刚说过,私有成员变量是一个特例)
- 私有成员(成员=变量+方法)按理说都不能继承,但是这里的私有成员变量是一个特例,可以被继承,但是私有成员方法就不能被继承
2.无论使用何种方式构造子类对象时,子类都会自动调用父类的无参构造方法,就相当于在子类被调用的构造方法的第一句加上 super();的效果
- 其实也就是子类在构造对象时编译器会自动在被调用的子类构造方法的第一句加上super();
(所以如果我们在调用子类的构造方法构造对象时,如果在父类之中我们只定义了有参构造方法而没有定义无参空构造方法,那么这个时候编译器就会报错)
在我们的日程编程中我们以后应该:在使用继承时,在子类的无参构造方法中的第一行调用父类的无参构造方法,在子类的有参构造方法中的第一行调用父类的有参构造方法(标准而且降低了代码的重复性)
(也就是在子类的无参构造方法的第一句加上super();,在子类的含参构造方法的第一句加上super(name,age),这里的name和age只是举了一个例子,注意:这里的name和age都是实参)
this()和super()不能同时出现在同一个构造方法中,因为this()和super()调用构造方法时都要在构造方法中的第一行语句(也就是第一条有效语句),而只有一个第一行,也就自然不能同时出现
3.使用继承必须满足子类is a父类的逻辑关系(也就是不能滥用继承)
4.java语言只支持单继承而不支持多继承,也就是一个子类只有一个父类,但是一个父类可以有多个子类
- java是单继承,而c++是多继承,c++允许一个子类有多个父类