class Person{
private String name;
private int age;
private String gender;
//......
}
class Student extends Person{
private String id;
private String schoolBelongTo;
//......
}
public void showInfoOf(Person person){
System.out.println(person.getName());
//......
}
当使用函数“showInfoOf”时,如果使用Peron的对象作为参数,OK。但是,如果它是Student类型,我无法访问字段id和schoolBelongTo。 所以我很困惑,怎么样? 实际上,我想知道这是其中一个(面向接口编程或面向超类的编程)的缺点???
答案 0 :(得分:0)
答案 1 :(得分:0)
两种可能的解决方案:
您可以以编程方式检查showInfoOf (Person)
中的类型,并使用强制转换来访问&打印所需的字段;或者,
您可以在Person上定义一个方法,该方法将打印/提供所需的信息 - 并将showPersonInfo()
替换为完全,或将其调用。这是更多的OO方式。
示例:
abstract class Person {
private String name;
private int age;
private String gender;
public void printInfo() {
System.out.println( name);
}
}
class Student extends Person{
private String id;
private String schoolBelongTo;
@Override
public void printInfo() {
super.printInfo();
System.out.println( id);
System.out.println( schoolBelongTo);
}
}
public void showInfoOf (Person person){
person.printInfo();
}
在此示例中,所有功能都已移至Person.printInfo()
,并且showInfoOf (Person)
中没有真正的功能。
然而在现实世界中,你可能想要在Person.provideInfo()
函数中移动多功能性 - 可能返回一个LinkedHashMap字段&值(因为未标记的值本身并不是很好的设计)。
showInfoOf (Person)
函数可以处理格式化&将值打印到特定要求,保留Person.provideInfo()
函数general&多用途。