前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java 初始化基类

java 初始化基类

作者头像
葫芦
发布2019-04-17 14:25:37
5740
发布2019-04-17 14:25:37
举报
文章被收录于专栏:葫芦葫芦
在使用继承过程中,需要先声明新类与旧类相似,用关键字 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语句之后。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014/01/31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档