在抽象类中创建方法而不在扩展它的类中覆盖方法是一种好习惯吗?

时间:2019-02-25 11:06:48

标签: 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());
    }
}

1 个答案:

答案 0 :(得分:1)

  

我应该在抽象类中创建getter和setter方法吗?

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

  

在抽象类内部对方法进行不同的变化是一种好习惯吗?

您是指抽象方法还是非抽象方法?是的,这很标准。举个例子:

public abstract class Example {

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

  protected abstract void internalMethod();
}

Example的实现者只能访问publicMethod,并且可以确保执行所有所需的准备工作和清理任务,而无需在{{ 1}},因为仅Example需要被覆盖。

  

我应该在个人类中覆盖那些方法吗?

不,绝对不是。至少只要不向方法中添加其他功能,就不应仅仅为了在可实例化的类中实现抽象方法就覆盖抽象方法。

通常,如果在深度类型层次结构中实现某些内容,则继承应格外小心,因为代码往往变得很难理解。 IMHO层次结构已经开始变得难以使用,层次结构级别为4-5,但这很可能是基于意见的。有一条规则是优先选择组合而不是继承,以避免简单实用程序对继承的过度使用。