博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
继承与接口课堂作业
阅读量:7111 次
发布时间:2019-06-28

本文共 1170 字,大约阅读时间需要 3 分钟。

(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”。

 

转载于:https://www.cnblogs.com/cn123456/p/4948424.html

你可能感兴趣的文章
PHP之文档转换的代码
查看>>
elasticsearch6 设置分片数及副本数
查看>>
MongoDB的简单学习3-固定集合和GridFS
查看>>
spring 发送 email
查看>>
如何制作含校验码的流水条码?
查看>>
openstack对接vcenter问题集合
查看>>
什么是BFC
查看>>
第二周工作总结:C++
查看>>
使用CentOS DVD作为默认yum源
查看>>
DB2常用命令
查看>>
Gtk-Message: Failed to load module "canberra-gtk-module"
查看>>
用于应付输入错误时的一段关键代码
查看>>
[summary] 线段树
查看>>
开发监控云组态软件的组成
查看>>
openfire插件开发入门——过滤脏话
查看>>
谈谈Exception,什么时候抛出?什么时候接住?
查看>>
Mac虚拟机安装win7攻略 必须点赞
查看>>
ubuntu 使用源安装高版本内核 --- apt命令
查看>>
非递归实现中序遍历二叉树
查看>>
Android Eclipse 导入 AS Gradle AAR 库手册
查看>>