关于继承
子类能继承父类的那些方法
子类是对父类的一种扩展,子类会从父类继承绝大多数的方法,但是具体有那些呢,又有那些不能被子类继承呢,本文主要就是我为了总结而写的,可能会不全。
首先子类不能继承父类用private修饰的私有方法
package com.z.extend;
public class TestExtendsTwo {
public static void main(String[] args) {
person person= new person();
person.eat();
}
}
class Dog {
private void eat() {
System.out.println("狗吃?");
}
}
class BlackDog extends Dog{
}
如上代码当你尝试调用父类的私有方法时会提示你找不到这个方法,同理被final修饰的方法也不能找到
子类也不能继承父类的构造方法
package com.z.extend;
public class TestExtends {
public static void main (String[] args) {
student st= new student();
}
}
class person {
public person() {
System.out.println("这是一个人");
}
}
class student extends person{
public student() {
System.out.println("这是一个学生");
}
// public person() {
//
// }
}
当你写出如下代码是出现这样好像子类能继承父类的构造方法,是这样吗?

现在我们把我注释掉的代码打开
报错了! 如果子类继承了父类,那为什么不能重写方法呢?
实际上实例代码中子类并没有继承父类的构造方法,在最开始好像继承了,是因为子类在写构造方法的时候默认在构造方法的最前列有一行super() 因此在实例化构造的时候回调用父类的构造,并不是继承了父类的构造
子类能不能继承父类中实现了接口的方法
当然能,在父类实现接口的时候,实现接口的方法其实就已经是一个父类的普通方法了,既然不特殊有有什么资格不被子类锁继承呢,答案是肯定的。
关于接口和子类还有一个比较有趣的现象,子类和父类同时实现了同一个接口
这中情况并不是没有的,比如ArrayList实现了List这个接口,ArrayList的抽象父类AbstractList同样实现了List接口。这种情况子类并不需要特意的去重写接口中的抽象方法,因为父类已经帮忙做了这个操作,就想上面说了,接口中的抽象方法被重写后就相当于是一个普通的方法,所以这个方法其实已经被子类继承,就算我们不特意重写,它也是被重写过的(虽然是和父类一样)

浙公网安备 33010602011771号