java 编程思想之7.2.1初始化基类

继承是所有OOP语言不可缺少的能成部分。但继承并不只是复制基类的接口。当创建一个导出类的对象时,该对象包含了一个基类的子对象。这个子对象与你用基类直接创建的对象是一样的。二者的区别在于,后者来自于外部,而基类的子对象被包装在导出类对象内部。

对基类子对象的正确初始化顺序之前不能说不知道,好像所有知道点都一样,只是去看,就觉得自己掌握了,其实不是。那只是当时的自以为。呵呵,眼高手低。今天看到相关的章节,翻翻又是觉得都是自己知道的呀。也许是对同一个知识点有过太多次这种想,于是今天决定不只是看,不只是自以为的知道。动动手敲些例子吧。做了开发三年半了,也不算是个菜鸟了吧。之前项目一直安排相当紧凑,三年多大多只是在实现功能,赶进度。少知又少的去研究本质。现在处于项目空闲期也三四个月了。一度觉得应该回归本质好好书本及语言本质而不是一味的实现实现。好吧,开了个小差,回归正题。先看我敲的简单不能基础了的JAVA小示例:

对基类子对象的正确初始化,仅有一种方法可以保证这一点,在构造器中调用基类构造器来执行初始化,而基类构造器具有执行基类初始化所需要的所有知识能力。Java会自动在导出类的构造器中插入对基类构造器的调用。

默认构造器

package com.ebao.java.constructor;

public class ClassA {
 ClassA(){
  System.out.println("==============ClassA");
 }
}

package com.ebao.java.constructor;

public class ClassB {
 ClassB(){
  System.out.println("==============ClassB");
 }
}

package com.ebao.java.constructor;

public class ClassC extends ClassA {
 ClassB cb = new ClassB();
 public static void main(String[] arg){
  ClassC cc = new ClassC();
 }
}

运行结果:

//==============ClassA
  //==============ClassB

由此看出实例一个类时,构建过程是从基类向下扩展。然后是成员对象。所以基类构造器总是会被调用且是在导出类构造器之前被调用。

带参数的构造器

上面的例子中都是默认构造器,也就是都是不带参数的构造器。编译器可以轻松的调用它们是因为不必考虑要传递什么样的参数的问题。但是如果没有默认的基类构造器,或者想调用一个带参数的基类构造器。就必须用super显式地编写调用基类构造器的语句,并配以适当的参数列表:

public class Game {
 Game(int i){
  System.out.println("---------------------Game");
 }
}

package com.ebao.java.constructor;

public class BoardGame extends Game {
 BoardGame(int i){
  super(i);
  System.out.println("--------------------BoardGame");
 }
}

package com.ebao.java.constructor;

public class Chess extends BoardGame {
 Chess(int i) {
  super(i);
  System.out.println("--------------------Chess");
 }
 public static void main(String[] arg){
  Chess cs = new Chess(7);
 }
}

运行结果:

---------------------Game
--------------------BoardGame
--------------------Chess

如果不在子类中显示调用基类构造器或调用类基构造器不是第一句编译报错如下

时间: 2024-10-09 23:39:54

java 编程思想之7.2.1初始化基类的相关文章

java 编程思想笔记(二)——初始化

一.问题 随着计算机革命的发展,"不安全"的编程方式已逐渐成为编程代价高昂的主因之一. 初始化和清理正是涉及安全的两个问题. 二.java 解决方案 构造器:一种特殊的方法.java 中"初始化"和"创建"捆绑在一起,两者不能分离. 垃圾回收器:释放无用的对象. 三.方法重载 为什么要在这里讲方法重载?我觉得首先:构造器是一种特殊的方法,再一个,构造器除了默认构造器还有有参构造器.为了让方法名称相同而形式参数不同的构造器同时存在,就必须用到方法重

《Java编程思想》笔记 第七章 复用类

1.组合 将其他类的对象引用置于新的类中. 3.继承 关键词extends  一个类继承基类后自动获得 基类的所有域(包括字段 引用 内部类 )和方法,当然不包括private,子类中调用继承下来的方法也不需要基类对象引用.继承相当于对基类的一个扩展,因为基类有的它都有,再额外添加了一些域和方法(或覆写方法)而已. 4.super 4.1 super.f() 调用基类的f()方法. 4.2 构造器中的super(args) 调用基类构造器,且只能在第一行. 4.3 由于构造器被重载后默认构造器不

Java 编程思想 第五章 ----初始化与清理(1)

从今天开始每天一小时的java 编程思想的阅读和编码,其实就是把书上的代码抄下来. 5.5 清理:终结处理和垃圾回收 初始化和清理工作同等重要,但是清理工作却被常常忘记,但是在使用对象之后,对对象弃之不顾的做法并不是很安全.Java有自己的垃圾回收器负责回收无用的对象占据的内存资源.但也有特殊情况:假定你的内存区域不是用new获得的,这是无法用垃圾回收器释放所以java中允许在类中定义一个名为 finalize()的方法.       工作原理: 一旦垃圾回收器准备好释放对象占用的存储空间,将首

Java编程思想(二) —— 初始化与清理

(一)操作符一章的int类型数据溢出的问题在Java7的版本中仍然存在,而且溢出的结果千奇百怪. public class Hello { public static void main(String[] args) { int i = Integer.MAX_VALUE; System.out.println(i); System.out.println(i*4); System.out.println(i*5); } } 结果分别为2147483647,-4,2147483643. 当应用中

《Java编程思想》学习01:普通类的初始化加载顺序分析

<Java编程思想>学习01:普通类的初始化加载顺序分析 本文根据控制变量法,分析普通类(没有extends,implement)初始化的加载顺序: 参考<Java编程思想>第五章 源码 StaticClass1类 package com.tyj.study.thinkinjava; /* * *@Description: *@Author:TYJ *@Date: create in 2019/7/9 17:22 */ public class StaticClass1 { { S

《 Java 编程思想》CH05 初始化与清理

< Java 编程思想>CH05 初始化与清理 用构造器确保初始化 在 Java 中,通过提供构造器,类的设计者可确保每个对象都会得到初始化.Java 会保证初始化的进行.构造器采用与类相同的名称. 由于构造器的名称必须与类名完全相同,所以"每个方法首字母小写"的风格在这里不适用. 构造器方法可以有参数,这样可以在初始化对象时提供实际参数. 不接受任何参数的构造器叫做"默认构造器". 构造器一种特殊类型的方法,它没有返回值 方法重载 因为可以要用多种方式

Java编程思想 4th 第2章 一切都是对象

Java是基于C++的,但Java是一种更纯粹的面向对象程序设计语言,和C++不同的是,Java只支持面向对象编程,因此Java的编程风格也是纯OOP风格的,即一切都是类,所有事情在类对象中完成. 在Java中,使用引用来操纵对象,在Java编程思想的第四版中,使用的术语是"引用(reference)",之前有读过Java编程思想第三版,在第三版中,使用的术语是"句柄(handle)",事实上,我觉得第三版的术语"句柄"更加形象传神,就像你用一个

《Java编程思想(第4版)》pdf

下载地址:网盘下载 内容简介 编辑 本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel的文字亲和力和小而直接的编程示例面前也会化解于无形.从Java的基础语法到最高级特性(深入的面向对象概念.多线程.自动项目构建.单元测试和调试等),本书都能逐步指导你轻松掌握.[1] 从本书获得的各项大奖以及来自世界各地的读者评论中,不难看出这是一本经典之作.本书的作者拥有多年教学经验,对C.C++以及Java语言都有独到.深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概

Java编程思想总结笔记Chapter 2

本章介绍Java程序的基本组成部分,体会到Java中几乎一切都是对象. 第二章   一切都是对象 目录: 2.1 用引用操纵对象 2.2 必须由你创建所有对象 2.3 永远不需要销毁对象 2.4 创建新的数据类型:类 2.5 方法.参数和返回值 2.6 构建一个Java程序 2.7 你的第一个Java程序 2.8 注释和嵌入式文档 2.9 编码风格 2.1 用引用操纵对象 一切都看作对象,操纵的标识符实际上是对象的一个"引用",遥控器(引用)操纵电视机(对象),想调控电视,只需通过遥控