接口与继承动手动脑整理

动手实验:继承条件下的构造方法调用

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

是第一句的情况:

不是第一句的情况:

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

不可变类的实例:Address.java

参看ExplorationJDKSource.java示例

此示例中定义了一个类A,它没有任何成员:

class A { },示例直接输出这个类所创建的对象

      public static void main(String[] args)    {

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

我们得到了一个奇特的运行结果:

反汇编:

前面示例中,main方法实际上调用的是:public void println(Object x),这一方法内部调用了String类的valueOf方法。valueOf方法内部又调用Object.toString方法:

public String toString() {

      return getClass().getName() +"@" +

      Integer.toHexString(hashCode());

}

hashCode方法是本地方法,由JVM设计者实现: public  native int hashCode();

我们来看一段代码(示例Fruit.java ):

注释掉toString方法之后:

去掉所有注释后:

结论:“+”运算中,当任何一个对象与一个String对象,连接时,会隐式地调用其toString()方法,默认情况下,此方法返回类名 @ + hashCode”。为了返回有意义的信息,子类可以重写toString()方法。

时间: 2024-10-05 04:33:40

接口与继承动手动脑整理的相关文章

动手动脑整理2

1.ClassAndObjectTest.java运行结果 2.请输入并运行以下代码,得到什么结果? public class Hello{ public static void main(String args[]){ Foo obj1=new Foo(); Foo obj2=new Foo(); System.out.println(obj1==obj2); } } class Foo {int value=100;} 当“==”施加于原始数据类型变量时,是比较变量所保存的数据是否相等:当“

动手动脑整理

当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行. package com; class Root{static{System.out.println("Root的静态初始化块");}{System.out.println("Root的普通初始化块");}public Root(){System.out.println("Root的无参数的构造器");}}class Mid extends Root{static{System.ou

接口与继承课堂例子整理

public class ke { /** * @param args */ public static void main(String[] args) { System.out.println(new A()); } } class A{} [email protected]类的主类

动手动脑接口与继承

(1)可以使用instanceof运算符判断一个对象是否可以转换为指定的类型: 参看实例: TestInstanceof.java public class TestInstanceof { public static void main(String[] args) { //声明hello时使用Object类,则hello的编译类型是Object,Object是所有类的父类 //但hello变量的实际类型是String Object hello = "Hello"; //String

Java(接口与继承)动手动脑

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

第七讲继承与接口动手实验和动手动脑

[动手实验一] 继承条件下的构造方法调用 运行 TestInherits.java示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大! 结论:通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句. TestInherits.java class Grandparent { public Grandparent() { System.out.println("

动手动脑之继承与接口

?动手实验一:继承条件下的构造方法调用 运行 TestInherits.java 示例 package demo; class Grandparent { public Grandparent() { System.out.println("GrandParent Created."); } public Grandparent(String string) { System.out.println("GrandParent Created.String:" + s

JAV07接口与继承之动手动脑问题解决

动手动脑:请自行编写代码测试以下特性:在子类中,若要调用父类中被覆盖的方法,可以使用super关键字. 1.源代码: package Work; class A{ public A(){ System.out.println("Class A."); } public A(String string){ System.out.println("Class A."+string); }} class B extends A{ public B(){ super(&qu

课堂作业及 动手动脑问题整理

课堂作业一 使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”. 程序: package com; public class Duixiang { public static void main(String[] args){ duixiang a=new duixiang(); a.out(); duixiang b=new duixiang(); b.out(); } } class duixiang{ stati