Java初始化基础类知识点学习
博客专区 > erdan522 的博客 > 博客详情
Java初始化基础类知识点学习
erdan522 发表于2个月前
Java初始化基础类知识点学习
  • 发表于 2个月前
  • 阅读 2
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

  Java初始化基础类知识点学习,Java研发工程师,最缺乏人才的职业之一,以实战项目为主的教学方法,掌握实用的技能与经验,有效地缩短同企业用人需求的差距。以下是关于Java初始化基础类知识点学习,大家一起来学习下Java编程语言。
 

 
  Java初始化基础类知识点学习:
 
  由于这儿涉及到两个类基础类及衍生类,而不再是以前的一个,所以在想象衍生类的结果对象时,可能会产生一些迷惑。从外部看,似乎新类拥有与基础类相同的接口,而且可包含一些额外的方法和字段。但继承并非仅仅简单地复制基础类的接口了事。创建衍生类的一个对象时,它在其中包含了基础类的一个"子对象"。这个子对象就象我们根据基础类本身创建了它的一个对象。从外部看,基础类的子对象已封装到衍生类的对象里了。
 
  当然,基础类子对象应该正确地初始化,而且只有一种方法能保证这一点:在构建器中执行初始化,通过调用基础类构建器,后者有足够的能力和权限来执行对基础类的初始化。在衍生类的构建器中,Java会自动插入对基础类构建器的调用。下面这个例子向大家展示了对这种三级继承的应用:
 
  //: Cartoon.java
 
  // Constructor calls during inheritance
 
  class Art {
 
  Art() {
 
  System.out.println("Art constructor");
 
  }
 
  }
 
  class Drawing extends Art {
 
  Drawing() {
 
  System.out.println("Drawing constructor");
 
  }
 
  }
 
  public class Cartoon extends Drawing {
 
  Cartoon() {
 
  System.out.println("Cartoon constructor");
 
  }
 
  public static void main(String[] args) {
 
  Cartoon x = new Cartoon();
 
  }
 
  } ///:~
 
  该程序的输出显示了自动调用:
 
  Art constructor
 
  Drawing constructor
 
  Cartoon constructor
 
  可以看出,构建是在基础类的"外部"进行的,所以基础类会在衍生类访问它之前得到正确的初始化。
 
  即使没有为Cartoon()创建一个构建器,编译器也会为我们自动合成一个默认构建器,并发出对基础类构建器的调用。
 
  1. 含有自变量的构建器
 
  上述例子有自己默认的构建器;也就是说,它们不含任何自变量。编译器可以很容易地调用它们,因为不存在具体传递什么自变量的问题。如果类没有默认的自变量,或者想调用含有一个自变量的某个基础类构建器,必须明确地编写对基础类的调用代码。这是用super关键字以及适当的自变量列表实现的,如下所示:
 
  //: Chess.java
 
  // Inheritance, constructors and arguments
 
  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();
 
  }
 
  } ///:~
 
  如果不调用BoardGames()内的基础类构建器,编译器就会报告自己找不到Games()形式的一个构建器。除此以外,在衍生类构建器中,对基础类构建器的调用是必须做的第一件事情(如操作失当,编译器会向我们指出)。
 
  2. 捕获基本构建器的违例
 
  正如刚才指出的那样,编译器会强迫我们在衍生类构建器的主体中首先设置对基础类构建器的调用。这意味着在它之前不能出现任何东西。正如大家在第9章会看到的那样,这同时也会防止衍生类构建器捕获来自一个基础类的任何违例事件。显然,这有时会为我们造成不便。
 
       西安UI培训          西安软件测试培训             西安java培训机构

共有 人打赏支持
粉丝 0
博文 33
码字总数 20133
×
erdan522
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: