免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1180 | 回复: 0
打印 上一主题 下一主题

java中基类的初始化 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-19 09:53 |只看该作者 |倒序浏览
1.基类的初始化
当创建一个派生类对象的时候,这个对象里面还有一个基类的子对象。基类子对象的初始化只有调用基类的构造函数,才能正确地进行初始化。java会让派生类的构造函数自动地调用基类的构造函数。下面的程序演示了三级继承体系下如何进行初始化。

class Art {
  Art() {
    System.out.println("Art constructor");
  }
}
class Drawing extends Art {
  Drawing() {
    System.out.println("Drawing constructor");
  }
}
public class Cartoon extends Drawing {
  public Cartoon() {
    System.out.println("Cartoon constructor");
  }
  public static void main(String[] args) {
    Cartoon x = new Cartoon();
  }
}

输出结果:
Art constructor
Drawing constructor
Cartoon constructor

可以看到,构造行为是从基类“向外”发展的,所以基类会在派生类的构造函数访问它之前先进行初始化。即使不创建Cartoon()的构造函数,编译器也会为你造一个默认的构造函数,然后再由它去调用基类的构造函数。

2.带参数的构造函数

如果要调用的基类构造函数是带参数的,就必须用super关键词及合适的参数调用基类的构造函数了。

class Game {
  Game(int i) {
    System.out.println("Game constructor");
  }
}
class BoardGame extends Game {
  BoardGame(int i) {
    super(i);
    System.out.println("BoardGame constructor");
  }
}
public class Chess extends BoardGame {
  Chess() {
    super(11);
    System.out.println("Chess constructor");
  }
  public static void main(String[] args) {
    Chess x = new Chess();
  }
}
输出结果:
Game constructor
BoardGame constructor
Chess constructor

如果不在BoardGame()里面调用基类的构造函数,编译器就会报错说找不到Game()形式的构造函数。对派生类构造函数而言,调用基类的构造函数应该是它做的第一件事情。



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/19013/showart_114893.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP