继承,组合,第三种关系是代理,这是继承和组合之间的中庸之道
java并没有提供对代理的直接支持,他的实现是组合加继承
idea可以直接向get,set 一样生成该方法
class SpaceShipDelegation { private SpaceShipcontrols spaceShipcontrols; } class SpaceShipcontrols { public void up() { } public void down() { } public void forward() { } public void back() { } }
在需要生成代理对象的类里 alt+insert ok ok就好了
class SpaceShipDelegation { private SpaceShipcontrols spaceShipcontrols; public void up() { spaceShipcontrols.up(); } public void down() { spaceShipcontrols.down(); } public void forward() { spaceShipcontrols.forward(); } public void back() { spaceShipcontrols.back(); } }
全部程序 及其测试
EnableEurekaServer @SpringBootApplication public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); SpaceShipDelegation spaceShipDelegation = new SpaceShipDelegation(); spaceShipDelegation.up(); spaceShipDelegation.down(); spaceShipDelegation.back(); spaceShipDelegation.forward(); } } class SpaceShipDelegation { private SpaceShipcontrols spaceShipcontrols; public void up() { spaceShipcontrols.up(); } }
测试包异常 解决方式
@EnableEurekaServer @SpringBootApplication public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); SpaceShipDelegation spaceShipDelegation = new SpaceShipDelegation(); spaceShipDelegation.up(); spaceShipDelegation.down(); spaceShipDelegation.back(); spaceShipDelegation.forward(); } } class SpaceShipDelegation { private SpaceShipcontrols spaceShipcontrols= new SpaceShipcontrols(); public void up() { spaceShipcontrols.up(); } public void down() { spaceShipcontrols.down(); } public void forward() { spaceShipcontrols.forward(); } public void back() { spaceShipcontrols.back(); } } class SpaceShipcontrols { public void up() { System.out.println("up()"); } public void down() { System.out.println("down()"); } public void forward() { System.out.println("forward()"); } public void back() { System.out.println("back()"); } }因为成员变量java初始化的会赋值为null。
private SpaceShipcontrols spaceShipcontrols= new SpaceShipcontrols();其实会发生NPE-空指针异常 所以说初始化就在我们身边,一定要多学习基础。