可以使用具体的类来实现抽象吗?

时间:2018-07-09 06:06:56

标签: java oop interface abstract-class abstraction

我尽力找到了这个问题的最佳答案,但徒劳无功。
因此,我在一次采访中被问到了这个问题,并且回答“是”。由于抽象只不过是向用户隐藏实现细节,因此用户不必担心实现,而只知道方法签名(需要传递的对象的类型和返回类型)。根据传递的对象类型,开发人员可以决定实现方式并返回相应的结果。 因此,根据我的说法,这也可以使用下面的具体普通类来完成。

public class LearnAbstraction {

    public static void main(String[] args) {
        Animal animal = new Tiger();
        SpeakingAnimal sa = new SpeakingAnimal();
        sa.getAnimalToSpeak(animal);
    }
}

class SpeakingAnimal {
    public void getAnimalToSpeak(Animal animal){
        animal.speak();
    }
}

class Animal{
    public void speak(){
        System.out.println("I am an Animal");
    }
}

class Tiger extends Animal {
    public void speak() {
        System.out.println("I am an Animal and Tiger");
    }
}

class Horse extends Animal {
    public void speak() {
        System.out.println("I am an Animal and Horse");
    }
}

我知道这不是实现抽象的正确方法,必须使用接口或抽象类来完成。但是,问题是是否可以使用具体的类来实现抽象(让我们将适当的方法放在一边)。因此,回答“是”是否正确?

1 个答案:

答案 0 :(得分:1)

抽象类不能产生实例;您可以通过声明私有构造函数来确保不这样做。

这里是一个例子:

class Animal{
    private Animal() {
    }

    public void speak(){
        System.out.println("I am an Animal");
    }

    static class Tiger extends Animal {
        public void speak() {
            System.out.println("I am an Animal and Tiger");
        }
    }

    static class Horse extends Animal {
        public void speak() {
            System.out.println("I am an Animal and Horse");
        }
    }
}