结构
-ClassA
|---|
|---ClassAImplA
|---ClassAImplB
-Main
A 类:
public interface ClassA {
public void execute();
}
实现A:
public class ClassAImplA implements ClassA
{
private int a = 5;
public ClassAImplA (int a){setA(a);}
@Override
public void execute() {
System.out.println(a);
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
实现B:
public class ClassAImplB implements ClassA
{
private boolean b = false;
public ClassAImplB (int a){setB(b);}
@Override
public void execute() {
System.out.println(b);
}
public booelan getB() {
return b;
}
public void setA(boolean b) {
this.b = b;
}
主要:
public class main {
/**
* @param args
*/
public static void main(String[] args) {
ClassAImplA param1 = new ClassAImplA(10);
ClassA = param1;
}
}
通过这样做,我使 ClassA
可以互换,
但我
失去了访问参数int a
的能力。
有没有办法让它仍然可以互换,并且仍然可以访问 int a,
或者在ClassAImplB
的情况下,字段boolean b
?
最佳答案
有一种方法,但这不是一个好主意,因为它违背了目的:
ClassAImplA param1 = new ClassAImplA(10);
ClassA = param1;
if (param1 instanceof ClassAImplA) {
param1x = (ClassAImplA) param1;
System.out.println(param1x.getA());
}
但不要这样做。它违背了该模式的目的。
该模式的目的是使用 ClassA
类型的对象,
无需知道它们是如何工作的。
getA
方法仅在ClassAImplA
中定义,
它是一个实现细节,不应与 ClassA 类型的用户相关。
他们不应该知道。它是隐藏的。
这就是所谓的良好封装和信息隐藏。
关于java - 策略模式无法访问 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27583483/