有没有办法在基类中使用重写的函数? (在Java中)

问题描述 投票:0回答:3

我试图在基类中实现一个功能,该功能使用子代的功能(在基类中作为抽象功能捍卫)。我认为一个例子可以最好地说明问题。

abstract class Animal{
   public void doSomthing(){
      this.sound();
   }

   protected abstract void sound();
}

class Dog extends Animal{
   @Override
   protected void sound(){ 
   System.out.println("WAF"); 
 }
}

现在,当我尝试在运行时获取元素(通过看起来像Animal factory method("Dog);的工厂方法)并调用doSomthing方法时,由于出现了抽象方法,我得到了异常,我的问题是有任何方法可以绕过此问题或此问题的另一种解决方案。

java oop polymorphism overriding
3个回答
2
投票
 class myMain
{
   public static void main(String[]args)
   {
    Animal doggo = new Dog(); // create object for dog
    doggo.animalSound(); // call the sound for dog

   }
}
    class Animal 
{
  public void animalSound() 
  {
    System.out.println("The animal makes a sound");
  }
}
class Dog extends Animal
{
   public void animalSound()
   {
     System.out.println("The Dog Says bow wow! "); 
   }
}

1
投票

我看不到您在问题描述中提到的方法有任何问题。也许您在犯其他错误。检查以下工作代码:

abstract class Animal {
    public void doSomthing() {
        sound();
    }

    protected abstract void sound();
}

class Dog extends Animal {
    @Override
    protected void sound() {
        System.out.println("WAF");
    }
}

class AnimalFactory {
    static Animal animal;

    public static Animal factoryMethod(String animalName) {
        if ("Dog".equals(animalName)) {
            animal = new Dog();
        }
        return animal;
    }
}

class Main {
    public static void main(String[] args) {
        Animal animal = AnimalFactory.factoryMethod("Dog");
        animal.sound();
    }
}

输出:

WAF

0
投票

可以从超类调用子类方法。请参考以下链接中提到的代码段:Can a Parent call Child Class methods?

© www.soinside.com 2019 - 2024. All rights reserved.