继承:
把多个类中相同的成员给提取出来定义到一个独立的类中。然后让这多个类和该独立的类产生一个关系,
这多个类就具备了这些内容。这个关系叫继承。
通过extends关键字可以实现类与类的继承
class 子类名 extends 父类名 {}
继承的好处:
1、提高了代码的复用性,提高软件开发效率。
2、提高了代码的维护性。(如果功能的的代码需要更改,修改一处即可)
3、让类与类产生了一个关系,提供了多态的前提。
Java中继承的特点
1、Java中类只支持单继承,不支持多继承。
一个类只能有一个父类,不可以有多个父类。
2、Java中可以多层(重)继承(继承体系)
class A{}
class B extends A{}
class C extends B{}
子类不能继承父类的私有成员,只能继承父类所以非私有的成员(成员方法和成员变量)
子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。
定义继承需要注意:
不要为了其他类中某个功能而去继承。
什么时候使用继承呢?
继承体现的是:is a的关系。
使用继承,必须保证类与类之间有所属(is a)关系,即xxx是zzz中的一种。
Java继承中的成员关系:
1、成员变量
Fu类中的成员变量是非私有的,子类中可以直接访问,若Fu类中的成员变量私有了,
子类是不能直接访问的。
当子父类中出现了同名成员变量时,在子类中若要访问父类中的成员变量,必须使用
关键字super来完成。
子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢?
子类的方法访问变量的查找顺序:
在子类方法的局部范围找,有就使用。
在子类的成员范围找,有就使用。
在父类的成员范围找,有就使用。
找不到,就报错。
2、成员函数:
当在程序中通过对象调用方法时,会先在子类中查找有没有对应的方法,若子类
中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法。
3、构造方法
在创建子类对象时,父类的构造函数会先执行,因为子类中所有构造函数的第一行有默
认的隐式super();语句,调用本类中的构造函数用this(实参列表)语句,调用父类中的构造函
数用super(实参列表)。
子类的构造方法默认会去访问父类的无参构造方法
是为了子类访问父类数据的初始化
父类中如果没有无参构造方法,怎么办?
子类通过super去明确调用带参构造
子类通过this调用本身的其他构造,但是一定会有一个去访问了父类的构造
让父类提供无参构造
4、成员方法
成员方法特殊情况——覆盖
子类中出现与父类一模一样的方法时,会出现覆盖操作,也成为override重写、复写
或者覆盖。
重写的注意事项
重写需要注意的细节问题
1. 子类方法覆盖父类方法,必须要保证权限大于等于父类权限
2. 静态只能覆盖静态,或者被静态覆盖,意思就是 静态函数不存在重写!
3. 写法上稍微注意:必须一模一样:函数的返回值类型 函数名 参数列表都要一样
总结:
当一个类是另一个类中的一种时,可以通过继承,来扩展功能
如果父类具备的功能内容需要子类特殊定义时,使用重写
子类的成员方法和父类中的成员方法名称一样,这个怎么访问呢?
通过子类对象访问一个方法的查找顺序:
在子类中找,有就使用
在父类中找,有就使用
找不到,就报错