java - 在抽象类中创建方法而不是在扩展它的类中重写它们是一个好习惯吗?

标签 java inheritance methods abstract

我有一个问题。

我应该在抽象类中创建 getter 和 setter 方法吗?下面的示例在抽象类中包含这些方法,该类由 individual 类扩展。在抽象类中使用不同的方法是一个好习惯吗?我应该重写 individual 类中的这些方法吗?然而,对我来说覆盖这些没有意义,因为它们不会做任何不同的事情,只是设置和获取不同的属性。有什么建议吗?

public abstract class Human {
    private String name;
    private String surname;

    public Human(String name, String surname) {
        this.name = name;
        this.surname = surname;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }
}


public class Individual extends Human{
    private String dob;

    public Individual(String name, String surname, String dob) {
        super(name, surname);
        this.dob = dob;
    }

    public String getDob() {
        return dob;
    }

    public void setDob(String dob) {
        this.dob = dob;
    }

    public void viewIndividual(){
        System.out.println("First name of individual is: " + getName());
        System.out.println("Surname of individual is: " + getSurname());
        System.out.println("Date of birth of individual is: " + getDob());
    }
}

最佳答案

Should I create getter and setter methods inside abstract class?

是的,如果一个方法对于大多数预期的抽象类实现是通用的,那么在抽象类中实现这些方法就完全没问题。为 Human 的属性提供 getter 和 setter 是否真的很好,很难说。您当前使用它的方式没有多大意义,因为您将行为方面(viewIndividual)与数据方面(getter 和 setter)混合在一个类中。鉴于上面的代码,您可以使用抽象类中的 protected 成员,并可能使用 setter 来避免实现中的代码重复。但如果您想将对象用作 Java-Bean,也没有问题。

Is it a good practice to have different variety on methods inside abstract class?

你的意思是抽象方法和非抽象方法?是的,这是非常标准的。举个例子:

public abstract class Example {

  public final void publicMethod() {
    // do some preparations
    internalMethod();
    // do some cleanup
  }

  protected abstract void internalMethod();
}

Example 实现的使用者将只能访问 publicMethod,并且保证执行所有需要的准备和清理任务,而无需一遍又一遍地重复此代码在Example的实现中,因为只有internalMethod需要被覆盖。

Should I be overriding those methods inside Individual class?

不,绝对不是。至少只要您不向方法添加额外的功能,就不应该仅仅为了在可实例化类中实现抽象方法而重写它们。

一般来说,您应该小心继承,因为如果您在深层类型层次结构中实现某些内容,代码往往会变得非常难以理解。恕我直言,层次结构已经开始变得难以使用,层次结构级别已经达到 4-5,但这可能很大程度上基于意见。有一条规则是优先选择组合而不是继承,以避免在简单的实用程序中过度使用继承。

关于java - 在抽象类中创建方法而不是在扩展它的类中重写它们是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54864818/

相关文章:

c++ - 继承与纯虚函数混在一起,有什么方法可以不必重新定义它们呢?

java - 将多个对象合并为多种格式

java - 将继承参数从父类(super class)更改为子类

actionscript-3 - 冲突范围 : Global Functions and Class Methods of the Same Name

java - 在 Java 中,除了数量和类型之外,对方法参数施加约束

改变参数数量的Java函数调用

java - 为 SQL 数据中的重复值分配标识符

java - 哪种 noSQL 数据库合适

java - 带有 web.xml 的 Jsf 库

java - toString 方法抛出异常