假设我有这个家长班
public abstract class Parent
{
private String name;
private String surname;
public Parent(String name, String surname)
{
this.name=name;
this.surname=surname;
}
并且假设我有很多这样的子类,并且每个人都有自己不同的属性可添加到其父类中
public class Child extends Parent
{
private String favColor;
public Child(String name,String surname,String favColor)
{
super(name,surname);
this.favColor=favColor;
}
public getFavColor()
{
return this.favColor
}
现在我处于这种情况
Parent parent = new Child(name,surname,favColor);
而且我想做的就是这样在对象父对象上调用方法getFavColor()
parent.getFavColor();
这有效吗?我猜不是,所以我怎么能在这样的对象上调用这种方法?我想到了在超类上声明childs属性的抽象获取方法,但这听起来不太容易遵循开放/闭合原则,因为在将来的某个时候,当我想添加更多类似于child的类时,我将不得不声明每个超类中子属性的获取者,该父类不应该了解其子元素。
非常感谢:)
您将需要abstract
方法来执行此操作。您的父母已经是abstract
,所以很好。它会像这样:
public abstract class Parent {
private String name;
private String surname;
public Parent(String name, String surname) {
this.name = name;
this.surname = surname;
}
public void showFavColor() {
system.print.ln(this.getFavColor());
}
abstract string getFavColor();
}
public class Child extends Parent {
private String favColor;
public Child(String name, String surname, String favColor) {
super(name, surname);
this.favColor = favColor;
}
@Override
public String getFavColor() {
return this.favColor
}
}
父母的每个孩子必须扩展了抽象功能。由于该函数是在父级中声明的[[technically,因此可以从中访问它。
这意味着,你可以做Parent parent = new Child(name,surname,favColor);
parent.showFavColor();
public abstract class Parent
{
private String name;
private String surname;
public Parent(String name, String surname)
{
this.name=name;
this.surname=surname;
}
public abstract String fav();
}
所谓:
parent.fav();
因此,您可以对孩子使用不同的方法,例如:
public class Child extends Parent { private String favColor; public Child(String name,String surname,String favColor) { super(name,surname); this.favColor=favColor; } public String fav() { return this.favColor; } }
和:
public class SecondChild extends Parent { private String favSport; public Child(String name,String surname,String favColor) { super(name,surname); this.favColor=favColor; } public String fav() { return this.favSport; } }
仅在所有子代中方法的签名均相等时才使用此方法(在您的情况下,如果所有子代方法均返回String)。