【发布时间】:2019-07-18 18:36:20
【问题描述】:
我有一个问题。
我应该在抽象类中创建 getter 和 setter 方法吗?下面的示例包含由 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());
}
}
【问题讨论】:
-
没关系。但是抽象类的重点是至少要有一个抽象方法。
-
这正是抽象类的意义所在(与接口相反),您可以定义 一些 方法而不必被覆盖。
-
抽象类的子类必须实现(覆盖)其抽象超类的所有抽象方法。超类的非抽象方法只是按原样继承。如果需要,它们也可以被覆盖。
-
设置 getter 和 setter 周期是不好的做法。您将您的课程视为愚蠢的数据包。根据对象的行为来考虑对象。在您的情况下,您应该能够打印
Individual。也许这就是它所能做的一切,这很好。为什么您需要能够更改每个字段? -
如果您认为抽象类的某些 default 方法不应该被覆盖,您可以将它们设为
final。该类的其他实现当然会使用/访问这些方法,但不能覆盖它们。
标签: java inheritance methods abstract