1.1、继承的由来 至于由来简单一句话:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为。
继承描述的是事物之间的所属关系,这种关系是 is-a 的关系。
1.2、继承的定义 继承:就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。
这里再声明一点,父类又称为超类或者基类。而子类又称为派生类这点很基础!
1.3、继承的优点 提高代码的复用性。 类与类之间产生关系,为多态做了完美的铺垫(不理解没关系,之后我会再写一篇多态的文章) 虽然继承的优点很多但是Java只支持单继承,不支持多继承。
1.4、继承的格式 通过 extends 关键字,可以声明一个子类继承另外一个父类,定义格式如下:
class 父类 {
...
}
class 子类 extends 父类 {
...
}
当类之间产生了关系后,其中各类中的成员变量,产生了哪些影响呢? 关于继承之后的成员变量要从两方面下手,一是成员变量不重名方面,二是成员变量重名方面。
如果子类父类中出现不重名的成员变量,这时的访问是没有影响的.
如果子类父类中出现重名的成员变量,这时的访问是有影响的 子父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量时,需要使用 super 关键字,至于修饰父类成员变量,类似于之前学过的 this 。 使用格式 super.父类成员变量名
如果父类中的成员变量非私有:子类中可以直接访问。私有:子类是不能直接访问的。
当类之间产生了关系,其中各类中的成员方法,又产生了哪些影响呢? 同样我们依旧从两方面分析。
如果子类父类中出现不重名的成员方法,这时的调用是没有影响的。对象调用方法时,会先在子类中查找有没有对 应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法.
成员方法重名大体也可以分两种情况: 1、方法名相同返回值类型、参数列表却不相同(优先在子类查找,没找到就去父类) 2、方法名、返回值类型、参数列表都相同,没错这就是重写(Override)
重写 :子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。
构造方法的名字是与类名一致的,所以子类是无法继承父类构造方法的。
构造方法的作用是初始化成员变量的。所以子类的初始化过程中,必须先执行父类的初始化动作。子类的构造方法中默认会在第一句代码中添加super(),表示调用父类的构造方法,父类成员变量初始化后,才可以给子类使用。
super() 不写也默认存在,而且只能是在第一句代码中。 下一篇是关于this与super关键字的总结。