第七章 复用类

class Cleaner{
	
	public Cleaner(int i) {
		System.out.println("AAAAAAAAA");
	}
	public Cleaner() {//
		System.out.println("BBBBBBBBBBB");//
	}//
	
	private String s="Cleaner";
	public void append(String a){
		s+=a;
	}
	public void dilute(){
		append("dilute()");
	}
	public void apply(){
		append("apply()");
	}
	public void scrub(){
		append("scrub()");
	}
	public String toString(){
		return s;
	}
	public static void main(String[] args) {
		Cleaner x=new Cleaner(1);
		x.dilute();x.apply();x.scrub();
		System.out.println(x);
	}
}

public class TestExtends extends Cleaner{
	public TestExtends() {
		System.out.println("CCCCCCCCCCCCCCCCCCC");
	}
	public TestExtends(int i) {
		System.out.println("DDDDDDDDDDDDDDDDDDD");
	}
	
	public void scrub(){
		append("TestExtends.scrub()");
		super.scrub();
	}
	public void foam(){
		append(" foam()");
	}
	public static void main(String[] args) {
		TestExtends x=new TestExtends();
		x.dilute();
		x.apply();
		x.scrub();
		x.foam();
		System.out.println(x);
		System.out.println("aaaaaa");
		Cleaner.main(args);
	}
}

打印结果是:
 

BBBBBBBBBBB

CCCCCCCCCCCCCCCCCCC

Cleanerdilute()apply()TestExtends.scrub()scrub() foam()

aaaaaa

AAAAAAAAA

Cleanerdilute()apply()scrub()

这个类基本可以说明了继承。

class Cleaner{
	
	public Cleaner(int i) {
		System.out.println("CCCCCCC");
	}
	public Cleaner() {//
		System.out.println("DDDDDDD");//
	}//
}

public class TestExtends extends Cleaner{
	public TestExtends() {
		System.out.println("AAAAA");
	}
	public TestExtends(int i) {
		super(1);
		System.out.println("BBBBBB");
	}
	
	public static void main(String[] args) {
		TestExtends x=new TestExtends();
		TestExtends x1=new TestExtends(2);
	}
}

打印为:

DDDDDDD

AAAAA

CCCCCCC

BBBBBB

关于继承的初始化,父类子类都是无参数的构造方法的时候,新建子类实例的时候先调用父类的默认无参构造方法,再调用子类的无参构造方法;要是父类有了需要传入参数的构造方法,子类有无参数的构造方法,当使用子类无参数的构造方法创建实例的时候,父类必须要声明无参的构造方法(如上代码//那几行没错的话TestExtends x=new TestExtends()这句将报错)。

到底是该用组合还是继承,一个最清晰的判断办法就是问一问自己是否需要从新类向基类进行向上转型。如果必须向上转型,则继承是必要的;但如果不需要,则应该好好考虑自己是否需要继承。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值