今天在学习继承时遇到了个问题
来问一下各位
如下
//这里我创建了一个抽象类,有eat和sleep方法
public abstract class Animal {
public abstract void eat();
public abstract void sleep();
}
//这里我用另一个抽象类继承了animal
//只重写了父类的一个方法
public abstract class dog extends animal{
@Override
public void eat() {
System.out.println("吃xxx");
}
//然后我创建了一个普通类
//继承了dog类,然后写了dog类的一个方法
//但是这里出现了报错,要求我重写animal类的两个方法
//我这里只写了一个,但是我的视频课里貌似写一个是正确的
//链接https://www.youtube.com/watch?v=JqA9wK4xpio&list=PLD3Xyx6ef38yAdTNXD7ntDlaarf8NEoZ4&index=167
//大概在6分钟往后 (我和视频里的用的都是java9版本)
public class dog2 extends dog{
@Override
public void eat() {
System.out.println("吃骨头");
}
}
原视频在子类Dog中已经实现了eat方法,所以在dog2中不需要实现eat,但是sleep是在DogGolden类中具体实现了的
.
你两次都是实现的eat方法,没有实现sleep方法,所以会报错,因为sleep一直没有实现
你捋一下就明白了,继承抽象类必须要实现抽象类里面的抽象方法,否则这个类只能是抽象类,首先dog继承Animal,dog是抽象方法,但此时eat已不再是抽象方法,所以dog1继承dog,只需要实现抽象类里面的方法即可,也就是sleep,dog1里面你没必要写eat方法
另外我想说一下你的Animal类写错了,类名大写,但是你在dog继承它的时候将他的类名小写了,应该会报错吧?不报错就奇怪了,还有就是类里面只能有一个public修饰的公共类,public修饰的类往往是和Java文件名一致的,正确代码如下
//这里我创建了一个抽象类,有eat和sleep方法
public abstract class Animal {
public abstract void eat();
public abstract void sleep();
}
//这里我用另一个抽象类继承了animal
//只重写了父类的一个方法
abstract class dog extends Animal {
public void eat() {
System.out.println("吃xxx");
}
//然后我创建了一个普通类
//继承了dog类,然后写了dog类的一个方法
//但是这里出现了报错,要求我重写animal类的两个方法
//我这里只写了一个,但是我的视频课里貌似写一个是正确的
//链接https://www.youtube.com/watch?v=JqA9wK4xpio&list=PLD3Xyx6ef38yAdTNXD7ntDlaarf8NEoZ4&index=167
//大概在6分钟往后 (我和视频里的用的都是java9版本)
public class dog2 extends dog {
@Override
public void sleep() {
}
}
}
它那是sleep,你eat前面写过了不写倒是没事,但你sleep没写过啊
对于继承了抽象类的实体类,则必须实现所有的抽象方法。