抽象类的继承问题求解答

今天在学习继承时遇到了个问题
来问一下各位
如下


//这里我创建了一个抽象类,有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类中具体实现了的
.

img

img

你两次都是实现的eat方法,没有实现sleep方法,所以会报错,因为sleep一直没有实现

img


有帮助望采纳~

你捋一下就明白了,继承抽象类必须要实现抽象类里面的抽象方法,否则这个类只能是抽象类,首先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没写过啊

对于继承了抽象类的实体类,则必须实现所有的抽象方法。