抽象类用法

时间:2017-07-13 22:49:09

标签: java

在应用程序中使用抽象类时,我遇到了两种可能的方法来访问抽象类中的数据。因为它是一个抽象类的背景,一个人会优先于另一个吗?

public abstract class Example {

       private String name;

       public Example(String name) {
            this.name = name;
       }

       //other methods that can be overridden in child classes
}

public class ExampleTwo extends Example {

       public ExampleTwo() {
            super("ExampleTwo");
       }
}

或者在给定相同输出的情况下简单地使用值覆盖返回方法会更好。例如:

public abstract class Example {

       public abstract String getName();

       //other methods that can be overridden in child classes
}

public class ExampleTwo extends Example {

       @Override
       public String getName() {
             return "ExampleTwo";
       }

}

2 个答案:

答案 0 :(得分:1)

您描述了两种不同的场景。在第一个m.find()中是一个变量,它在构造函数中设置并使用其getter读取。第二个定义了name方法,它可以返回任何内容,例如随机字符串。

答案 1 :(得分:1)

嗯,首先,这两种方法完全不同。您的第一个示例永远不会将name变量公开给其子项,因为它是private。您的第二个示例要求每个孩子都将getName作为其API的一部分来实现。

最终取决于你想要完成的事情。

在第一种情况下,我会假设您正在为您的课程建立某种传统状态,并且您的孩子需要向父母提供一些元数据,以便父母的方法可以正确响应。想想一个Animal等级;你在父母中定义makeSound,但是每个孩子都会告诉它如何发言。

在第二种情况下,我倾向于使用抽象类的接口,因为在这种方法中你没有从继承获得任何胜利。