关于继承

子类能继承父类的那些方法

子类是对父类的一种扩展,子类会从父类继承绝大多数的方法,但是具体有那些呢,又有那些不能被子类继承呢,本文主要就是我为了总结而写的,可能会不全。

首先子类不能继承父类用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接口。这种情况子类并不需要特意的去重写接口中的抽象方法,因为父类已经帮忙做了这个操作,就想上面说了,接口中的抽象方法被重写后就相当于是一个普通的方法,所以这个方法其实已经被子类继承,就算我们不特意重写,它也是被重写过的(虽然是和父类一样)

posted @ 2019-02-28 10:27  落地的果实  阅读(158)  评论(0)    收藏  举报