课堂例子验证—继承条件下的构造方法调用

代码一:

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();

}

}

运行结果:

原因分析:

通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句。

代码二:

public final class Address {

private final String detail;

private final String postCode;

//在构造方法里初始化两个实例属性

public Address()

{

this.detail = "";   this.postCode = "";

}

public Address(String detail , String postCode)

{

this.detail = detail;

this.postCode = postCode;

}

//仅为两个实例属性提供getter方法

public String getDetail()

{

return this.detail;

}

public String getPostCode()

{

return this.postCode;

}

//重写equals方法,判断两个对象是否相等。

public boolean equals(Object obj)

{

if (obj instanceof Address)

{    Address ad = (Address)obj;

if (this.getDetail().equals(ad.getDetail()) && this.getPostCode().equals(ad.getPostCode()))

{

return true;

}

}

return false;

}

public int hashCode()

{

return detail.hashCode() + postCode.hashCode();

}

}

运行结果:

代码三:

public class ExplorationJDKSource {

/**   * @param args   */  public static void main(String[] args)

{

System.out.println(new A());

}

}

class A{}

运行结果:

代码四:

public class Fruit {

public String toString()

{

return "Fruit toString.";

}

public static void main(String args[])

{

Fruit f=new Fruit();

System.out.println("f="+f);

// System.out.println("f="+f.toString());

}

}

结果截图:

代码五:

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();

}

}

时间: 2024-12-10 04:07:44

课堂例子验证—继承条件下的构造方法调用的相关文章

继承条件下的构造方法调用 super

运行TestInherits.java示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大! 程序: class Grandparent { public Grandparent() { System.out.println("GrandParent Created."); } public Grandparent(String string) { System.o

java 继承条件下的构造方法调用

运行 TestInherits.java示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大!   1.没有super的调用 1 class Grandparent 2 { 3 4 5 public Grandparent() 6 { 7 8 System.out.println("GrandParent Created."); 9 10 } 11 12 13 pu

继承条件下的构造方法调用

程序源代码: package homework;class Grandparent{ public Grandparent() { System.out.println("GrandParent Created."); }public Grandparent(String string){ System.out.println("GrandParent Created.String:"+string); }}class Parent extends Grandpar

java课程三课堂例子验证

1.ClassAndObjectTest.java 验证截图: 2.ObjectEquals.java 运行截图: 3.InitializeBlockDemo.java Java进行初始化的地方有两个:初始化块和构造函数,其中初始化块又分为静态初始化块和实例初始化块.静态初始化块是类中由static修饰的初始化块,实例初始化块为类中没有任何关键字修饰的初始化语句. 如果在主函数中创建对象时没有形参时,如果在类中定义了公共的变量并给与了赋值,那么就会把值赋给主函数中的变量,再调用类中的默认构造函数

JAVA语法基础课堂例子验证

一 枚举类型 源代码: public class EnumTest {  public static void main(String[] args) {   Size s=Size.SMALL;   Size t=Size.LARGE;   //s和t引用同一个对象?   System.out.println(s==t);  //   //是原始数据类型吗?    System.out.println(s.getClass().isPrimitive());    //从字符串中转换   Si

6动手动脑和课堂例子

1.动手动脑:继承条件下的构造方法调用(TestInherits.java) 1)super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句) ,super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名 super.成员函数据名(实参).super()从子类中调用父类的构造方法.调用super()必须写在子类构造方法的第一行,否则编译不通过.每个子类构造方法的第一条语句,都是隐含地调用s

APP弱网络条件下,体验优化之道

APP弱网络条件下,体验优化之道 最近跟朋友聊天刚好聊到这一块,他们是在做电商业务,商品图片及其多,API接口请求频率也高.然而,他们在移动2/3G的网络环境下,APP经常会出现Loading很久的情况,这里我把我们所分析与使用到的网络优化方案与大家分享一下. 所谓的弱网络,也就是指在网络不好的条件下进行使用APP,如2G.3G网络,这类网络条件下,用户的网络速度基本维持在10K/S~60K/S.如此差的网络环境, 如果还希望给用户提供良好的用户体验,那么我们的APP就该想想如何优化了. 转载表

C++对象模型——"无继承"情况下的对象构造(第五章)

5.2 继承体系下的对象构造 当定义一个object如下: T object; 时,实际上会发生什么事情呢?如果T有一个constructor(不论是由user提供或是由编译器合成),它会被调用.这很明显,比较不明显的是,constructor的调用真正伴随了什么? constructor可能内带大量的隐藏码,因为编译器会扩充每一个constructor,扩充程度视 class T的继承体系而定.一般而言,编译器所做的扩充操作大约如下: 1.记录在member initialization li

.NET DLL 保护措施详解(五)常规条件下的破解

为了证实在常规手段破解下能有效保护程序核心功能(演示版本对AES加解密算法及数据库的密钥(一段字符串)进行了保护),特对此DLL保护思路进行相应的测试,包含了反编译及反射测试,看是否能得到AES加解密算法的密钥及数据库字符串. 反编译: 我这里使用了.net dll反编译工具ILSpy,以下为真实截图. 1. NetProtect.BLLDemo.dll 2. NetProtect.ConsoleApplication1.exe 3. NetProtect.CoreClr.dll 综合上图,可以