接口与其实现类之间的关系(自己因为具体实例而产生的问题与解答)
接口里的方法是抽象的,不具体实现,需要实现类去实现它
实现类必须实现接口的所有方法(自己定义如何实现)
例子;
interface A{
void add();
}
class B implements A{
void add(){
sout("加")
}
}
class C implements A{
B b;
public void setC(B b){
this.b = b;
}
Void add(){
b.add();
}
}
那么现在就有了几个问题:
-
A a = new B(); 定义的对象a是A类型还是B类型? 答:是接口A引用指向B的对象,所以是B类型 那为什么要引用呢?和直接创建实现类有什么区别? 答:是为了使接口A实例化。。。为什么呢 是为了减少代码量修改,如果要使用另一个实现类D,将B改为D即可,其余实现的方法如a.add();不变。
-
我如果使用C创建的对象来实现方法,只能直接创建C的对象( C c = new C();)而不能引用A接口,不然C中的set方法无法使用,同时,C中引用的B对象也必须是B创建的对象(B b = new B();)不能引用A接口,原因是什么?
答:因为在C实现类里调用的是B的对象,所以在主函数里也必须调用B对象,如果在C里改用接口A(A a),则调用时就可以用A接口引用的B对象
A a = new B();
C c = new (a);
从而实现在B中添加功能需使用代理C来实现,从而保证B不会被修改,防止其他程序代码的错误
同时也能保证问题一;
学习文章:https://blog.csdn.net/weixin_44769957/article/details/110000881
分类:
java基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了