什么时候使用组合语法或继承语法?

概念

组合和继承都允许在新类中放置子对象,组合是显式这么做,继承是隐式这么做。
组合语法:

class WaterSource{
     
	private String s;
	WaterSource(){
     
		System.out.println("WaterSource()");
		s = "Constructed";
	}
    public String toString(){
     
		return s;
	}
}

public class SprinklerSystem{
     
	private String valve1,valver2,valve3,valver4;
	private WaterSource waterSource= new WaterSource();//这里就是组合,显式在新类中放置子对象
	public String toString(){
     
		return "waterSource="+waterSource; //会默认调用WaterSource类的toString方法
	}
	public static void main(String[] args){
     
		SprinklerSystem sprinklers = new SprinklerSystem();//这里会涉及到初始化顺序
		System.out.println(sprinklers);
    }
}

/*
输出结果:
WaterSource()
"waterSource=Constructed
*/

什么时候使用组合语法或继承语法?_第1张图片
继承语法:

class Cleanser{
     
	public Cleanser(){
     
		System.out.println("Cleanser");
	}
	public void scrub(){
     
		System.out.println("scrub()"); 
	}
}
public class Detergent extends Cleanser{
     
	public void scrub(){
     
		System.out.println("Detergent.scrub()");
	}
	public static void  main(String[] args){
     
		Detergent detergent = new Detergent();//会先去调用父类的构造器,再去调用本类的构造器,这里就是隐式在新类中放置子对象
		detergent.scrub();
	}
}
/*
输出结果:
Cleanser //继承关系,会先去调用父类的构造器,逐层递归,直至到最低层的子类的构造器
Detergent.scrub()
*/

什么时候使用组合语法或继承语法?_第2张图片

什么时候使用?

组合语法:通常用于想要在新类中使用现有现有类的功能而非它的接口这种情形。
继承语法:使用某个现有类,并开发它的特殊版本。

最简单的方法

根据两个类之间的关系来进行判断什么时候使用:
如果是“is a”(是一个)的关系用继承表达,比如车子是一种交通工具
如果是“has a”(有一个)的关系用组合表达,比如车子里面有一个人

你可能感兴趣的:(Thinking,in,Java,java,编程语言)