zoukankan      html  css  js  c++  java
  • 继承与接口课堂作业

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

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

                           

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

      Super调用基类构造方法的使用:

    1、它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数)。

    2、调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译时就会出错。

    3、Super()指的是对象,不可在static环境中使用。

    (2)为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来?

    构造一个对象,先调用其构造方法,来初始化其成员函数和成员变量。子类拥有父类的成员变量和成员方法,如果不调用,则父类继承而来的成员变量和成员方法得不到的正确初始化。

    (3运行Address.java

    (4参看ExplorationJDKSource.java示例

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

    class A { }

    示例直接输出这个类所创建的对象

        public static void main(String[] args)    {

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

    }

    运行结果:

     

    (1)使用javap –c命令反汇编ExplorationJDKSource.class;

     

    (2)阅读字节码指令,弄明白println()那条语句到底调用了什么?

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

    (5)运行Fruit.java

    答:Fruit类覆盖了Object类的toString方法, 在“+”运算中,当任何一个对象与一个String对象,连接时,会隐式地调用其toString()方法,默认情况下,此方法返回“类名 @ + hashCode”。

     

  • 相关阅读:
    ORM轻量级框架---ActiveAndroid
    面向对象系列一(继承)
    【Android自己定义View实战】之自己定义超简单SearchView搜索框
    POJ 2367:Genealogical tree(拓扑排序)
    计算客 商品推荐走马灯(简单)(求区间全部连续的回文串价值)
    供电电路切换与锂电池充电电路设计
    锂电池充电电路及电源自动切换电路的设计
    电池和Adapter切换电路改进实验(转)
    串口通信中ReadFile和WriteFile的超时详解!
    CRC算法与实现
  • 原文地址:https://www.cnblogs.com/cn123456/p/4948424.html
Copyright © 2011-2022 走看看