java 继承条件下的构造方法调用
- 运行 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 继承条件下的构造方法调用的更多相关文章
- 关于java继承条件下的构造方法调用
首先是测试代码: class Grandparent { public Grandparent() { System.out.println("GrandParent Created.&qu ...
- java中继承条件下构造方法的执行过程
继承条件下构造方法的调用规则如下: 情况1:如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法.在这种 ...
- JAVA继承中子父类的构造方法
首先,构造方法本身会有一个隐式的无参构造(默认): ①不写构造方法,类中的第一行代码事实上有一个默认的无参构造(系统会隐式为你写好) public class Student { private St ...
- Java继承(下)
Object类 在www.oracle中找到java 中的java.lang在中找到object类中找到可以看到在java语言中的定义 如何修改object中的equals类及测试 在object中类 ...
- java 继承(下)
1.抽象方法一定要写在抽象类中. 2.抽象类只在描述该事事务应该具备的东西. 3.抽象只能是抽象类和抽象方法. 4,抽象类没有任何抽象方法,这种类是不让创建对象. private static
- java继承关系中成员变量,构造方法,成员方法的关系
Java继承中的成员关系 A:成员变量 a:子类的成员变量名称和父类中的成员变量名称不一样,这个太简单写那个名字就访问那个名字! b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢? 子 ...
- Java面向对象 继承(下)
Java面向对象 继承(下) 知识概要: (1)抽象类 1.1 抽象类概述 1.2 抽象类的特点 ...
- Effective Java 第三版——69. 仅在发生异常的条件下使用异常
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- Java 继承中构造方法的执行顺序问题
在Java中,如果一个类没有任何显式创建的构造器则该类默认会有一个无参构造器:如果显式创建了有参构造器则该类就不再有默认无参构造器. 在Java继承中,构造器并不能被继承,而是被显示或隐式调用. 1. ...
随机推荐
- PHP: isset与empty的区别
PHP的isset()函数 一般用来检测变量是否设置 功能:检测变量是否设置 返回值: 若变量不存在则返回 FALSE 若变量存在且其值为NULL,也返回 FALSE 若变量存在且值不为NULL,则返 ...
- Codeforces Forethought Future Cup Elimination Round 选做
1146C Tree Diameter 题意 交互题.有一棵 \(n(n\le 100)\) 个点的树,你可以进行不超过 \(9\) 次询问,每次询问两个点集中两个不在同一点集的点的最大距离.求树的直 ...
- python scipy优化器模块(optimize)
pyhton数据处理与分析之scipy优化器及不同函数求根 1.Scipy的优化器模块optimize可以用来求取不同函数在多个约束条件下的最优化问题,也可以用来求取函数在某一点附近的根和对应的函数值 ...
- BottomTabBar 套用 recycleview出错问题
原来不是用这个框架的 是一个不知名的github开源类 开始感觉很不错 后来套用recycleview就出错应该是碎片关系没处理好 ,后来用bottomtabbar 他的傻逼思想深深撼动了我, ...
- 访问eureka 显示xml
两种解决方式: 方式一:(我是通过此方式解决的) 一个博客“http://blog.csdn.net/l5764773160/article/details/77483730”,他的解决方案是: 将项 ...
- nginx的日志切换
#touch /usr/local/nginx/sbin/cut_nginx_log.sh #chmod 755 /usr/local/nginx/sbin/cut_nginx_log.sh 下面是 ...
- 15.swoole学习笔记--异步写入文件
<?php //异步写入文件 $content="hello world"; swoole_async_writefile('2.txt',$content,function ...
- 十三、JavaScript之跨多行的变量申明
一.代码如下 二.运行效果 <!DOCTYPE html> <html> <meta http-equiv="Content-Type" conten ...
- 140-PHP类的抽象方法和继承
<?php abstract class father{ //定义一个抽象类 abstract public function test(); //定义抽象方法 } class son exte ...
- 手动搭建简单的vue项目
创建项目根目录 切换到根目录下 , 并执行 npm init , 所有选项都默认即可. 安装 webpack webpack-cli vue vue-loader 添加项目结构