首页 新闻 会员 周边 捐助

接口级实现相关问题

0
[已解决问题] 解决于 2017-09-26 21:00

以下Test方法中问什么不能掉Set方法?

A cproxy = new CProxy(bimpl); 

cproxy指向的是 CProxy类啊? 而Cproxy里面有setAspect(),为什么不能调。。。

interface A{
    void say();
}

class BImpl implements A{

    public void say() {
        System.out.println("Hello");
    }
}

class CProxy implements A{
    private Aspect aspect;
    
    private A a;
    
    public void setAspect(Aspect aspect) {
        this.aspect = aspect;
    }
    public CProxy(A a) {
        this.a = a;
    }
    public void say() {
        aspect.start();
        a.say();
        aspect.end();
    }
}
class Aspect{
    public void start() {
        System.out.println("start()");
    }
    public void end() {
        System.out.println("end");
    }
}
class Test{
    public static void main(String[] args) {
        A bimpl = new BImpl();
        A cproxy = new CProxy(bimpl);
        Aspect aspect = new Aspect();
        //cproxy.setAspect(aspect)
    }
}
小梁丶的主页 小梁丶 | 初学一级 | 园豆:172
提问于:2017-09-08 09:58
< >
分享
最佳答案
0

因为你是A cproxy,实例化出来的是A的派生实例,你只能看到A接口中暴露出来的方法,但的确在运行时cproxy就是CProxy实例,你可以强转为CProxy或者再接口层面添加对应方法

奖励园豆:5
Daniel Cai | 专家六级 |园豆:10424 | 2017-09-08 10:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册