1.

运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大!


class Grandparent
{


public Grandparent()
{

System.out.println("GrandParent Created.");

}


public Grandparent(String string)
{

System.out.println("GrandParent Created.String:" + string);

}

}

 

class Parent extends Grandparent
{


public Parent()
{

//super("Hello.Grandparent.");

System.out.println("Parent Created");

// super("Hello.Grandparent.");

}

}

 

class Child extends Parent
{


public Child()
{

System.out.println("Child Created");

}

}

 

public class TestInherits
{


public static void main(String args[])
{

Child c = new Child();

}

}

 

运行结果为  

GrandParent Created.
Parent Created
Child Created

结论:定义类的时候,先运行父类的构造方法,并且通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句。

 

2.

参看ExplorationJDKSource.java示例 此示例中定义了一个类A,它没有任何成员: class A { } 示例直接输出这个类所创建的对象 public static void main(String[] args) { System.out.println(new A()); }

我们得到了一个奇特的运行结果: A@1c5f743

package dongshou;

public class ExplorationJDKSource {

/**
* @param args
*/
public static void main(String[] args) {
System.out.println(new A());
}

}

class A{}

 

反编译的结果为

 

 

 

 

 

3.

请自行编写代码测试以下特性(动手动脑): 在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。

package dongshou;


class Parent
{


public Parent()
{

//super("Hello.Grandparent.");

System.out.println("Parent Created");

// super("Hello.Grandparent.");
}
void ok()
{
System.out.println("a");
}

}

 

class Child extends Parent
{

public Child()
{
super();
System.out.println("Child Created");
}
void ok()
{
super.ok();
System.out.println("b");
}
}

 

public class TestInherits
{


public static void main(String args[])
{

Child c = new Child();
c.ok();
}

}

运行结果

Parent Created
Child Created

a

b

 

posted on 2019-10-23 22:28  迎新  阅读(98)  评论(0编辑  收藏  举报