Java官方笔记6继承
本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 继承 Java只有单继承,最顶级的父类是Object。 子类会继承父类的fields和methods,而不会继承constructors,因为constructors不属于methods,但是子类可以通过super调用父类的constructor。 子类继承父类的范围是:public、protected、package-private 隐式转换,子类转父类(只有1个爸爸): Object obj = new MountainBike(); 显示转换,父类转子类(有多个子女,所以要明确指定): MountainBike myBike = (MountainBike)obj; 类有field,而接口没有,所以在多继承时就有问题:如果多个类有相同的field,那么子类将不知道用哪一个,而接口不存在这个问题。Java不支持继承多个类,但是可以实现多个接口。 重载 子类的方法跟父类有完全相同的签名和返回类型(也可以是子类),将会覆盖父类方法Override。 如果子类定义了1个static方法,跟父类完全相同,那么父类方法会被隐藏Hide。 Override和Hide是不同的: public class Animal { public static void testClassMethod() { System.out.println("The static method in Animal"); } public void testInstanceMethod() { System.out.println("The instance method in Animal"); } } public class Cat extends Animal { public static void testClassMethod() { System.out.println("The static method in Cat"); } public void testInstanceMethod() { System.out.println("The instance method in Cat"); } public static void main(String[] args) { Cat myCat = new Cat(); Animal myAnimal = myCat; // 隐式转换 Animal.testClassMethod(); // 调的父类 myAnimal.testInstanceMethod(); // 父类对象引用,还是调的子类 } } The static method in Animal The instance method in Cat Override只会调子类方法,而Hide取决于调用方是父还是子,比如这里的myCat,隐式转换为父类Animal后,会调父类的static方法,而调的实例方法却是子类的。(如果不是隐式转换,而是直接给父类实例化,那肯定还是调父类方法) ...