1

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

代码如下

 package testInherits;

 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注释掉

这是将第二个注释掉

这是将第一个注释掉的结果

结论:通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句。如果不是则会出现错误。

2.

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

构造函数是一种特殊的构造方法,在创建对象的时候初始化对象,构造一个对象,先调用其构造方法,而子类拥有父类的成员变量,如果不先调用父类的构造方法,则子类的成员变量也不能正确的初始化,不能反过来是因为,子类继承父类会由多得成员变量,而反过来,父类压根不知道子类有什么成员变量,构造方法就会出错,因此如果反过来,也是错误的。

用反编译结果如图:

3

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

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

4

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

代码如下:

 package test;

 class Pa
{
int x;
public Pa()
{ System.out.println("Parent Created1");
}
public void show(){
System.out.println("Parent Created2");
} } class Ch extends Pa
{
int y;
public Ch()
{ System.out.println("Child Created1"); }
public void show(){
super.show();
System.out.println("Parent Created3");
} } public class text
{ public static void main(String args[])
{ Ch c = new Ch();
c.show();
} }
 

5

1.   左边的程序运行结果是什么?
2.   你如何解释会得到这样的输出?
3.   计算机是不会出错的,之所以得
  到这样的运行结果也是有原因的,
  那么从这些运行结果中,你能总
  结出Java的哪些语法特性?
 请务必动脑总结,然后修改或编写一些代码进行测试,验证自己的想法,最后再看 后面的PPT给出的结论。
运行结果:
 

当子类与父类拥有一样的方法,再调用时看对象是什么类型的就调用什么类型的方法。如果具有相同的字段,子类方法中访问的是子类的字段,如果想访问父类的字段则可以用,super方法来实现。

最新文章

  1. Android高手速成--第二部分 工具库
  2. CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(3)线性渐变
  3. sysbench的安装与使用(with MySQL)
  4. 即时聊天IM之四 Android客户端IM帮助类编写
  5. [IOS Delegate和协议]
  6. ASP.NET Core文章汇总
  7. [AngularJS] Adding custom methods to angular.module
  8. SQL Server中存储过程比直接运行SQL语句慢的原因
  9. Android Apk获取包名和Activity名称
  10. java加解密
  11. UWP: 体验应用内购新接口——StoreContext类
  12. Python基础入门教程,Python学习路线图
  13. 使用JQuery实现图片轮播效果
  14. mysql拼接字符串
  15. Mysql 5.7 CentOS 7 安装MHA
  16. docker镜像加速器
  17. webpack的使用二
  18. SAP 000 客户端初始登录
  19. Fiddler 常用功能总结
  20. 用yield 实现协程 (包子模型)

热门文章

  1. Office_Word使用技巧大全(超全)
  2. 一些常用的字符串函数(CLR函数)
  3. webpack的介绍
  4. POJ2387 Til the Cows Come Home (最短路 dijkstra)
  5. [LeetCode]220. 存在重复元素 III
  6. __next__()
  7. ActiveMQ利用ajax收发消息
  8. vue-cli中开发生产css注入形式不同导致bug
  9. 第五小节之GUI(图形用户界面)
  10. cnblogs博客使用LaTeX公式