浏览量 4550
2014/01/31 02:07
在使用继承过程中,需要先声明新类与旧类相似,用关键字 extends实现
package javahaonan;
import static javahaonan.Print.*;
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();
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) {
Detergent x= new Detergent();
x.dilute();
x.apply();
x.scrub();
x.foam();
print(x);
print("Testing base class:");
Cleanser. main(args);
}
}
/*
Cleanserdilute()apply()Detergent.scrub()scrub()foam()
Testing base class:
Cleanserdilute()apply()scrub()
*/
这个程序中有两个main方法,只有命令行所调用的那个类的main()方法会被调用。
public void append(String a) { s+=a;}定义append()方法此方法是将s对象后连接a这个参数生成新的s对象。即"Cleanser"+a.
public void dilute() {append("dilute()" );}即将Cleanser后连接diulte()。
super.scrub();是在当前类中调用基类中的方法。
Cleanser. main(args);是调用Cleanser中的main方法。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
package javahaonan;
import static javahaonan.Print.*;
class Art{
Art(){ print("Art constructor"); }
}
class Drawing extends Art{
Drawing(){ print("Drawing constructor");}
}
public class Cartoon extends Drawing{
Cartoon(){print ("Cartoon constructor" );}
public static void main(String[] args) {
Cartoon x=new Cartoon();
}
}
/*Art constructor
Drawing constructor
Cartoon constructor
*/
构建过程是从基类“向外”扩散的,所以基类在导出类构造器可以访问他之前,就已经完成了初始化。即使不为Cartoon()创建构造器,编译器也会为你合成一个默认的构造器,该构造器将调用基类的构造器。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
package javahaonan;
import static javahaonan.Print.*;
class Game{
Game( int i){
print("Game constructor");
}
}
class BoardGame extends Game{
BoardGame( int i){
super(i);
print("BoardGame constructor");
}
}
public class Chess extends BoardGame {
Chess(){
super(1);
print("Chess constructor" );
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
Chess c =new Chess();
Game x =new Game(1);}
}
/*
Game constructor
BoardGame constructor
Chess constructor
Game constructor
*/
如果不在BoardGame()中调用基类构造器,编译器将会抱怨无法找到符合Game()形式的构造器,未定义隐式超构造函数 Game()。必须显式调用另一个构造函数。
而且,调用基类构造器必须是你在导出类构造其中要做的第一件事。构造函数调用必须是构造函数中的第一个语句。例如不能讲super(i);放置到print语句之后。
上一篇 搜索 下一篇