我试图在基类中实现一个功能,该功能使用子代的功能(在基类中作为抽象功能捍卫)。我认为一个例子可以最好地说明问题。
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方法时,由于出现了抽象方法,我得到了异常,我的问题是有任何方法可以绕过此问题或此问题的另一种解决方案。
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! ");
}
}
我看不到您在问题描述中提到的方法有任何问题。也许您在犯其他错误。检查以下工作代码:
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
可以从超类调用子类方法。请参考以下链接中提到的代码段:Can a Parent call Child Class methods?