Java编程思想第四版第七章学习(1)——基类初始化

来源:互联网 发布:php接收post json 编辑:程序博客网 时间:2024/06/06 03:08

复用类有两种方法,如下所示。
1、第一种方法:在新类产生现有类的对象,称为组合,该方法是复用了现有程序代码的
功能,而不是它的形式。
编译器不会为每一个引用都创建默认对象,如果要初始化这些引用,可以有如下四种方
法:
(1)在定义对象的地方,即意味着它们总是能够在构造器被调用前被初始化。
(2)在类的构造器中。
(3)就在正要使用这些对象之前。(惰性初始化)
(4)使用实例初始化。

2、第二种方法:按照现有类的类型来创建新类,无需改变现有类的形式,采用现有类的形
式并在其中添加新代码,即继承。
(1)父类被称为基类,子类被称为导出类。当创建一个导出类的对象时,该对象包含了
一个基类的子对象,这个子对象和你用基类直接创建的对象时一样的,只不过后者来自
于外部,而基类的子对象被包装在导出类的对象内部。
(2)基类子对象的正确初始化:Java会自动在导出类的构造器中插入对基类构造器的调
用,当有多层时,构建过程是从基类“向外”扩散的。因此基类在导出类构造器可以访问
它之前就完成了初始化。
(3)如果没有默认的基类构造器,或者想调用一个带参数的基类构造器,就必须用关键
字super显式地编写调用基类构造器的语句,并匹配适当的参数列表。
为了验证super的作用,我们完成了如下小练习。

/* * 题目: * 创建类A和类B,使A和B有带参数的构造器,从A中继承产生一个名为C的新类,并在C内创建一个B类的成员。 * 为C写一个构造器,并在其中执行所有的初始化。 */class A {    public A (int i, double y) {//是C的基类,有带参构造器        System.out.println("Constrcution A");        System.out.println("i= " + i);        System.out.println("y= " + y);    }}class B {    public B (int j) {        System.out.println("Construction B");        System.out.println("j= " + j);    }}class C extends A {    public C(int i, double y) {        super(2, 3.9);//需要用super显式地调用基类构造器        B b = new B(2);        System.out.println("Construction C");    }   }public class Jicheng {    public static void main(String[] args) {        // TODO Auto-generated method stub        C c = new C(2,3.9);    }}/*Output:Constrcution Ai= 2y= 3.9Construction Bj= 2Construction C*///

另外做小练习。

/* * 题目: * 练习八:创建一个基类,它仅有一个非默认构造器;在创建一个导出类,它带有默认构造器和非默认构造器。 * 在导出类的构造器中调用基类的构造器。 */class  Basic {    public Basic (String s){        System.out.println("This is the Basic Construction");        System.out.println("s= " + s);    }}class BasicTwo extends Basic {    public BasicTwo () {//BasicTwo的默认构造器        super("nihao");        System.out.println("This is the first Construction");       };    public BasicTwo(String s1, int i){//BasicTwo的非默认构造器        super(s1);        System.out.println("s1= " + s1 + ", i= " + i);        System.out.println("This is the second Construction");    }}public class Practice8_07 {    public static void main(String[] args) {        // TODO Auto-generated method stub        BasicTwo basic1 = new BasicTwo();        System.out.println();        BasicTwo basic2 = new BasicTwo("example two",520);    }}/*OutputThis is the Basic Constructions= nihaoThis is the first ConstructionThis is the Basic Constructions= example twos1= example two, i= 520This is the second Construction*///
1 0