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

 

1.没有super的调用

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

运行结果:

GrandParent Created.
Parent Created
Child Created

2.有super的构造调用,且在第一行。

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

运行结果:

GrandParent Created.String:Hello.Grandparent.
Parent Created
Child Created

3.super方法在输出语句的后面

 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调用基类的构造方法,必须是子类的构造方法中的第一个语句.(顺序不能打乱)

1.以final 开头的class类不允许继承

2.以final声明的方法不允许覆盖

3.以final声明的变量不允许更改

4.利用final,可以设计出一种特殊的“只读”的“不可变类”

java 继承条件下的构造方法调用的更多相关文章

  1. 关于java继承条件下的构造方法调用

    首先是测试代码: class Grandparent { public Grandparent() { System.out.println("GrandParent Created.&qu ...

  2. java中继承条件下构造方法的执行过程

    继承条件下构造方法的调用规则如下: 情况1:如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法.在这种 ...

  3. JAVA继承中子父类的构造方法

    首先,构造方法本身会有一个隐式的无参构造(默认): ①不写构造方法,类中的第一行代码事实上有一个默认的无参构造(系统会隐式为你写好) public class Student { private St ...

  4. Java继承(下)

    Object类 在www.oracle中找到java 中的java.lang在中找到object类中找到可以看到在java语言中的定义 如何修改object中的equals类及测试 在object中类 ...

  5. java 继承(下)

    1.抽象方法一定要写在抽象类中. 2.抽象类只在描述该事事务应该具备的东西. 3.抽象只能是抽象类和抽象方法. 4,抽象类没有任何抽象方法,这种类是不让创建对象. private  static

  6. java继承关系中成员变量,构造方法,成员方法的关系

    Java继承中的成员关系 A:成员变量 a:子类的成员变量名称和父类中的成员变量名称不一样,这个太简单写那个名字就访问那个名字! b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢? 子 ...

  7. Java面向对象 继承(下)

     Java面向对象   继承(下) 知识概要:               (1)抽象类 1.1 抽象类概述                            1.2 抽象类的特点       ...

  8. Effective Java 第三版——69. 仅在发生异常的条件下使用异常

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  9. Java 继承中构造方法的执行顺序问题

    在Java中,如果一个类没有任何显式创建的构造器则该类默认会有一个无参构造器:如果显式创建了有参构造器则该类就不再有默认无参构造器. 在Java继承中,构造器并不能被继承,而是被显示或隐式调用. 1. ...

随机推荐

  1. Excel的查询函数vlookup和index使用

    需求 有一些省市的区县,有600多条数据,只有名称,没有编码.现在要根据名称去3000多条数据里面查询. 如图,拿出一部分数据来演示 vlookup 使用vlookup,由于vlookup只能查询数据 ...

  2. 微信小程序—显示当前时间

    问题:  在页面上显示当前时间(日期) 方法: 1.在util.js (创建项目自动生成)中: // util.js const formatTime = date => { const yea ...

  3. Day6 - E - Brownie Points II POJ - 2464

    Stan and Ollie play the game of Odd Brownie Points. Some brownie points are located in the plane, at ...

  4. 如何拯救被Due逼疯的留学生们?

    Final季又到了,还有多少paper,多少project没完成?每年一到这个时候,手忙脚乱赶各种进度就成了留学小伙伴们共同的日常.任务多,不知道从何开始,拖延,烦躁……到底该怎么办?小编今天为各位介 ...

  5. python_os 的知识点

    1. os.getcwd() #获得当前路径 2. os.listdir(path) #列出path路径下的所有目录名和文件名包括后缀 3. os.mkdir(path) #在path创建一个目录 4 ...

  6. P 1007 素数对猜想

    转跳点:

  7. Fedora Workstation 31众多功能得到改进

    导读 周一,Red Hat的桌面高级经理Christian F.K. Schaller分享了一篇博客文章,概述了Fedora Workstation 31的各种改进和特性.这些包括Wayland的改进 ...

  8. Linux操作系统之Shell程序设计

    Shell是种命令解释程序,也可以看作是一种命令语言的解释器. 用户在与Shell交互时所输入的命令行必须符合Shell命令的语法和语义规范,才能够被Shell理解并执行.Shell所使用的这种命令语 ...

  9. NOIP2016天天爱跑步解题思路

    算法:LCA,树上差分+(乱搞) 如果有写错的地方请大佬更正 对于100%数据: u表示起点,v表示终点 对于一条u到v的路径,先讨论LCA!=u&&LCA!=v的情况: 分为u到LC ...

  10. C#中类的字段或属性不被序列化成JSON或XML

    将一个类序列化成JSON或XML时,如果某个字段或属性不想被序列化,则可以使用以下Attribute: 1.[Newtonsoft.Json.JsonIgnore]特性:使用Newtonsoft.Js ...