我有一个问题。
我应该在抽象类中创建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());
}
}
答案 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,但这很可能是基于意见的。有一条规则是优先选择组合而不是继承,以避免简单实用程序对继承的过度使用。