在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);
}
}
该程序的运行结果为:
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中所有可用的方法。