DarkHorse_pxf

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

【Thinking in Java】组合、继承和代理的区别

  1. 三者的定义:
    1. 组合:在新类中new 另外一个类的对象,以添加该对象的特性。
    2. 继承:从基类继承得到子类,获得基类的特性。
    3. 代理:在代理类中创建某功能的类,调用类的一些方法以获得该类的部分特性。
  1. 使用场合:
  • 组合:各部件之间没什么关系,只需要组合即可。like组装电脑,需要new CPU(),new RAM(),new Disk()……

  演示代码如下:

  

复制代码
 1 public class Computer {
 2     public Computer() {
 3         CPU cpu=new CPU();
 4         RAM ram=new RAM();
 5         Disk disk=new Disk();
 6     }
 7 }
 8 class CPU{    }
 9 class RAM{    }
10 class Disk{    }
复制代码

 

  • 继承:子类需要具有父类的功能,各子类之间有所差异。like Shape类作为基类,子类有RectangleCirCleTriangle……代码不写了,大家都经常用。
  • 代理:飞机控制类,我不想暴露太多飞机控制的功能,只需部分前进左右转的控制(而不需要暴露发射导弹功能)。通过在代理类中new一个飞机控制对象,然后在方法中添加飞机控制类的各个需要暴露的功能。

  演示代码如下:

复制代码
 1 public class PlaneDelegation{    
 2     private PlaneControl planeControl;    //private外部不可访问
 3     /*
 4      * 飞行员权限代理类,普通飞行员不可以开火
 5      */
 6     PlaneDelegation(){
 7         planeControl=new PlaneControl();
 8     }
 9     public void speed(){
10         planeControl.speed();
11     }
12     public void left(){
13         planeControl.left();
14     }
15     public void right(){
16         planeControl.right();
17     }
18 }
19 
20 final class PlaneControl {//final表示不可继承,控制器都能继承那还得了。。
21     protected void speed() {}
22     protected void fire() {}
23     protected void left() {}
24     protected void right() {}
25 }
复制代码

 

posted on   DarkHorse_pxf  阅读(1319)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示