JAVA中有关继承的一个实例

在JAVA中,“extends”用来表示继承,当创建一个类时,总是在继承,除非已经明确指出要从其他类中继承,否则都是隐式从JAVA中的标准根类Object中继承,下面的一个程序示范了JAVA中的许多特性:

package access;
class Cleanser{
	private String s = "Cleanser";
	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){
		Cleanser x = new Cleanser();
		x.dilute();
		x.apply();
		x.scrub();
		System.out.print(x);;
	}
	
}
public class Detergent extends Cleanser{
	public void scrub(){
		append(" Detergent.scrub()");
		super.scrub();
	}
	public void foam(){
		append(" foam()");
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Detergent x = new Detergent();
		x.dilute();
		x.apply();
		x.scrub();
		x.foam();
		System.out.println(x);
		System.out.println("Testing base class:");
		Cleanser.main(args);
	}

}

该程序的运行结果为:


1.在Cleanser的append()方法中,用“+=”操作符将String对象连接起来,此操作符在JAVA设计时被重载用以String类型的连接操作,另一个是“+”。

2.在Cleanser和Detregent中均含有main()方法,可以为每个类都创建一个main()方法,这样做可以使测试更加方便,每个类的单元测试简便易行,并且在单元测试完成后,不需要删除该方法,可以留待下次的测试。
3.一个程序中含有多个类,也只有在命令行所调用的那个类的main()方法会被调用,因此,如果命令行是java Detregent,那么Detregent.main()方法会被调用。即使Cleanser不是一个public类,如果命令行是java Cleanser,那么Cleanser.main()也会被调用,即使一个类只具有包访问权限,其public main()依然可以访问。

4.Detregent.main()明确调用了Cleanser.main(),并将参数传递给了它。也可以向其传递任何String数组。

5.Cleanser中的所有方法都应为public,这一点非常重要,为了继承,一般的规则为:将所有数据成员指定为private,将所有的方法指定为public,而protected借助导出类来访问,特殊情况下根据实际进行微动。原因在于如果不加任何的访问限制符,那么默认为包访问权限,它仅允许包内成员访问,而其它包的某个类要继承时,只能访问public成员。

6.在Cleanser的接口中有一组方法:append()、dilute()、apply()、scrub()、toString()方法。由于Detregent继承自Cleanser,那么Detregent可以在接口中自动获取这些方法,可以将继承视作对类的复用。

7.在scrub()中,使用基类定义的方法对其进行修改是可行的,若相要在新版本中调用从基类继承来的方法,但在scrub()中并不能直接调用scrub(),因为会产生递归效应,所以可以利用surper可以对基类中的scrub()进行调用。

8.在继承中,并不一定非得使用基类的方法,可以在导出类中添加自己想要的新方法。除了可以调用Detregent的方法外还可以调用Cleanser中所有可用的方法。


你可能感兴趣的:(JAVA)