public interface A {}
public class B implements A {
public void b() {}
}
public abstract class C {
private A a;
public void setA(A a) {
this.a = a;
}
...
}
public class D extends C {
...
public void d() {
// 此处想通过this.a访问到对象B的b方法
}
}
修改方式一:
public abstract class C {
protected A a;
public void setA(A a) {
this.a = a;
}
...
}
public class D extends C {
...
public void d() {
// 此处通过this.a访问到传入对象B的b方法
if(this.a instanceof B) {
((B) this.a).b();
}else {
...
}
}
}
修改方式二:
public abstract class C {
private A a;
public void setA(A a) {
this.a = a;
}
protected A getA() {
return a;
}
...
}
public class D extends C {
...
public void d() {
// 此处想通过getA()访问到传入对象B的b方法
A a = getA();
if(a instanceof B) {
((B) a).b();
}else {
...
}
}
}
C类中的属性A如果是private的,必须有get方法才能访问;如果不是,直接强制类型转换为B类型就可以访问。
先通过代码简单描述一下你的问题:
修改方式一:
修改方式二: