java 初始化基类

葫芦的运维日志

下一篇 搜索 上一篇

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语句之后。

 

葫芦的运维日志

上一篇 搜索 下一篇
© 冰糖葫芦甜(bthlt.com) 2019 王梓 赞助联系方式 陕ICP备17005322号