繁体   English   中英

抽象类用法

[英]Abstract class usage

在应用程序中使用抽象类时,我遇到了两种可能的方法来访问抽象类中的数据。 是否因为一个抽象类的上下文而优先于另一个?

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";
       }

}

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

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

最终,这取决于您要完成什么。

在第一种情况下,我假设您正在为类建立某种常规状态,并且您的孩子需要向父级提供一些元数据,以便父级的方法可以正确响应。 想想动物等级制度; 您可以在父makeSound中定义makeSound ,但每个孩子都会告诉它如何说话。

在第二种情况下,我更喜欢使用接口而不是抽象类,因为在这种方法中继承不会带来任何好处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM