ray*_*man 1 java oop polymorphism instanceof
我试图理解为什么我得到这些结果(这不是我预期的原因)"
public interface ICommandAble
{ }
public interface ILogAble extends ICommandAble
{ }
public interface IMonitorAble extends ICommandAble
{ }
public abstract class ClassAbs
{ }
public class A extends ClassAbs implements IMonitorAble, ILogAble
{ }
Run Code Online (Sandbox Code Playgroud)
测试方法:
public void test()
{
A a=new A();
List<ICommandAble>commandList=new ArrayList<ICommandAble>()
if (a instanceof ILogAble)
{
ILogAble logAbleItem=(ILogAble)a;
commandList.add(logAbleItem);
}
if (a instanceof IMonitorAble) {
IMonitorAble monitorAbleItem=(IMonitorAble)a;
commandList.add(monitorAbleItem);
}
for(ICommandAble item: commandList)
{
if(item instanceof IMonitorAble)
{
log.debug("is monitorable");
}
if(item instanceof ILogAble)
{
log.debug("is logable");
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
2013-04-22 18:25:00,498 com ... [DEBUG]是可以监视的
2013-04-22 18:25:02,150 com .... [DEBUG]可以登录
2013-04-22 18:25:08,322 com .... [DEBUG]是可以监视的
2013-04-22 18:25:08,977 com .... [DEBUG]可以登录
我期望看到:
2013-04-22 18:25:00,498 com ... [DEBUG]是可以监视的
2013-04-22 18:25:02,150 com .... [DEBUG]可以登录
我在这里错过了什么?
我现在明白了我想念的地方.但是我应该如何重新设计它将进入第二个实例 - 只进行一次?我的意图是看到这个:
2013-04-22 18:25:00,498 com... [DEBUG] is monitorable
2013-04-22 18:25:02,150 com.... [DEBUG] is logable
Run Code Online (Sandbox Code Playgroud)
有任何重新设计的建议吗?
否则我将获得所有内容的双重执行,而我的目的是只执行每一个.
谢谢,雷.
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |