【发布时间】:2021-07-29 13:48:31
【问题描述】:
class A{
int a;
public int getA(){
return a;
}
public void setA(int a){
this.a=a;
}
}
// B类扩展A类并添加一个额外的变量
class B extends A{
int b;
public int getB(){
return b;
}
public void setB(int b){
this.b=b;
}
}
//这是主类
class HelloWorld {
public static void main(String[] args) {
A aa;
if(runtime conditon) {
aa= new B();
aa.setA(3);
((B)aa).setB(4);
}
else{
aa= new A();
aa.setA(3);
}
}
}
如何在不使用强制转换的情况下设计解决上述问题? 很抱歉提出低级问题(我是 java 新手)。
【问题讨论】:
-
在您的第一个条件中,创建
B的实例并将其分配给B,进行更改,然后将该实例分配给aa -
要使多态性起作用,您应该阅读有关 Liskov 替换原则的内容。这意味着 A 的所有子类都应该可以用作 A 对象。在你的情况下,我会将 set/get B 方法移到 A 中。
-
在现实生活中,我能想到的最好的例子是 gui 库的视图层次结构,例如 Swing。
标签: java inheritance polymorphism multiple-inheritance