Java SE 第十六讲----面向对象特征之继承
1.继承(inheritance):Java是单继承的,意味着一个类只能从另一个类继承(被继承的类叫做父类也叫【基类 baseclass】),继承的类叫做子类,java中的继承使用extends关键字。
public class Child extends Parent{ public Child(){ System.out.println("child"); } public static void main(String[] args){ Child child = new Child(); } }
public class Parent { public Parent(){ System.out.println("Parent"); } }
输出结果:
Parent
child
分析:
如果将父类的构造方法加了参数int i,这样子类不变的话会编译不通过,可以在子类构造方法中加super(1)
2.当生成子类对象时,java默认首先调用父类的不带参数的构造方法,然后执行该构造方法,生成父类的对象,接下来再去调用子类的构造方法。
【要想生成子类的对象,首先需要生成父类的对象,没有父类对象就没有子类对象,比如说:没有父亲就没有孩子】
3.super关键字:super表示对父类对象的引用。
4.如果子类使用super()显示调用父类的某个构造方法,那么在执行的时候就会寻找与super()所对应的构造方法而不会再去寻找父类的不需参数的构造方法。
与this一样,super也必须要作为构造方法的第一条执行语句,前面不能有其他可执行语句。
5.关于继承的3个特点
1)父类有的,子类也有
2)父类没有,子类可以增加
3)父类有的,子类可以改变
如下所示,是属性的继承演示
public class InheritenceTest { public static void main(String[] args) { Apple apple = new Apple(); String s = apple.name; System.out.println(s); } }
public class Apple extends Fruit{ String name = "apple"; }
public class Fruit { String name = "fruit"; }
结果是:apple,如果Apple里没有写String name= "apple",就打印fruit
6.关于继承的注意事项
a)构造方法不能被继承
b)方法和属性可以被继承
c)子类的构造方法隐式地调用父类的不带参数的构造方法
d)当父类没有不带参数的构造方法时,子类需要使用super来显示地调用父类的构造方法,super指的是对父类的引用
e)supper关键字必须是构造方法中的第一行语句。
7.方法重写(Override):又叫做覆写,子类与父类的方法返回类型一样,方法名称一样,参数一样,这样我们说子类与父类的方法构成了重写关系。
8.方法重写与方法重载之间的关系:重载发生在同一个类内部的两个或多个方法,重写发生在父类与子类之间
9.当两个方法形成重写关系时,可以在子类方法中通过super.run()形成调用父类的run()方法,其中super.run()不必放在第一行语句,因为此时父类对象已经构造完毕,先调用父类的run()方法还是先调用子类的run方法是根据程序的逻辑决定的。
10.在定义一个类的时候,如果没有显式指定该类的父类,那么该类就会继承于java.lang.Object类(JDK提供的一个类,Object类是java所有类的直接或间接的父类)