java 继承条件下的构造方法调用
2024-08-29 22:30:14
- 运行 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,可以设计出一种特殊的“只读”的“不可变类”
最新文章
- php中json_decode返回数组或对象
- Guava------------Cache使用方法
- 【poj3263】 Tallest Cow
- 反射型xss绕过IE xss filter
- 选择两个字段时distinct位置的影响
- 一个朋友js图表开发遇到的问题 解决思路c和js
- Linux常用命令--文件的压缩和解压缩
- SSL/TLS/WTLS原理
- 清除div浮动的三种方式
- JSP标准标签库(JSTL)--国际化标签库 fmt
- Gradle 1.12用户指南翻译——第三十四章. JaCoCo 插件
- [oracle]查询一个表中数据的插入时间
- udt的java实现
- 【转】STM32 不占用定时器(包括SysTick)实现精确延时(巧用DWT)
- 搭建Harbor企业级docker仓库
- wonder vscode plugins
- [20180118]tstats的问题.txt
- python3简单实现微信爬虫
- springboot 入门
- iOS 在不添加库的情况下 通过抽象类来获取自己想要的方法