java面向对象基石之继承
继承用来复用现有的类来派生出新类,并且新类不仅
完全拥有基类的方法和属性也可以定义自己新的方法和属性。此外继承是一个
is-a的关系,也就是A(派生类)is a B(基类)A是B的一个分类,反过来关系不成立,比如:我们可以说男人是人,不能说人是男人。
1、继承语法
使用extends实现继承,java特性之一是除非指明继承自一个类,java会 隐式的继承标准库Object类。
java的super表示超类的意思使用super.x()调用基类的方法。如果方法x()被覆盖掉了那么super就可以调用基类版本中的方法。
2、初始化过程
继承不只是复制了基类的方法和域。当创建一个导出类对象时该对象内部包含一个基类的子对象。这个对象与直接用new创建出的对象是一样的。二者的区别在与, 后者来自于外部,而基类的对象存在于子类的内部。所以super关键字才可以调到基类的方法。
正是因为基类的对象存在于导出类的内部。所以正确的初始化才尤其重要,那么能做到这一点的就是在导出类的构造方法中插入基类的构造方法,但是调用的顺序从 基类开始向外扩散,所以基类在导出类构造器访问它之前就已经完成初始化了。
1、继承语法
使用extends实现继承,java特性之一是除非指明继承自一个类,java会 隐式的继承标准库Object类。
java的super表示超类的意思使用super.x()调用基类的方法。如果方法x()被覆盖掉了那么super就可以调用基类版本中的方法。
2、初始化过程
继承不只是复制了基类的方法和域。当创建一个导出类对象时该对象内部包含一个基类的子对象。这个对象与直接用new创建出的对象是一样的。二者的区别在与, 后者来自于外部,而基类的对象存在于子类的内部。所以super关键字才可以调到基类的方法。
正是因为基类的对象存在于导出类的内部。所以正确的初始化才尤其重要,那么能做到这一点的就是在导出类的构造方法中插入基类的构造方法,但是调用的顺序从 基类开始向外扩散,所以基类在导出类构造器访问它之前就已经完成初始化了。
构造器的不同于其他类型的方法,实际上构造器是static方法,基类的构造器总是在导出类的构造器被调用,按照继承的层次逐渐向上链接。使的每个基类的构造器都能被调用。
构造器的任务:检查对象是否被正确的构造
导出类只能访问自己的成员,不能访问基类的成员(成员用private)。因此只有基类才能初始化自己的成员,这也就是每个导出类必须调用构造器的原因,没有指
定的就调用默认构造器
如果要显式的初始化基类那么,使用super(参数列表)来完成。
3、关于多次继承之后方法多次重载
class A 有X(char c),B extends A 有X(int i) ,C extends B 定义 X(String s) 在C类不会屏蔽基类的任何一个版本名为X的方法,所以在C类的对象中可以调用任何一个版本的X方法只要参数匹配如:c.X('B'),c.(6).
如果要显式的初始化基类那么,使用super(参数列表)来完成。
3、关于多次继承之后方法多次重载
class A 有X(char c),B extends A 有X(int i) ,C extends B 定义 X(String s) 在C类不会屏蔽基类的任何一个版本名为X的方法,所以在C类的对象中可以调用任何一个版本的X方法只要参数匹配如:c.X('B'),c.(6).