`

第七章 复用类

 
阅读更多
第一种方法非常直观,就是组合。第二种方法就是继承。
组合只需将对象的引用置于新类中即可。


初始化基类

当创建了一个导出类的对象时,该对象包含了一个基类的子对象。这个子对象与你用基类直接创建对象是一样的。二者区别就是后者是来自于外部,前者来自于内部。
构建过程是从基类向外扩散的,所以基类在导出类构造器可以访问它之前,就已经完成了初始化。

结合使用组合和继承
Public class PlaceSertting extends Custom {
    private Spoon sp;
    private Fork frk;
}

虽然编译器强制你去初始化基类,并且要求你要在构造器起始处就要这么做,但是它并不监督你必须将成员对象也初始化,比如上面的Spoon等,都不会马上初始化。但是可以在构造函数中进行初始化。

final关键字

使用到final的三种情况:数据、方法和类。

对于编译器常量这种情况,编译器可以将该常量值带入任何可能用到它的计算式中,也就是说,可以在编译时执行计算式,这减轻了一些运行时的负担。在java中,这类常量必须是基本数据类型,并且以关键字final表示。在对这个常量进行定义的时候,必须对其进行赋值。

一个既是static又是final的域只占据一段不能改变的存储空间。

当对对象引用而不是基本类型运用final时,final使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象。然而,对象其自身确实可以被修改的,java并未提供使任何对象恒定不变的途径。

必须在域的定义处或者每个构造器中用表达式对final进行赋值,这正是final域在使用前总是被初始化的原因所在。

final参数

Java允许在参数列表中以声明的方式将参数指明为final。这意味着你无法在方法中更改参数引用所指向的对象。

final方法

在java早期实现中,如果一个方法是final的,就是同意编译器将针对该方法的所有调用都转为内嵌调用。但是如果方法太大,那么你的程序就会膨胀。在使用java SE5/6时,应该让编译器和JVM去处理效率问题,只有想要明确禁止覆盖时,才将方法设置为final的。

final和private关键字

类中所有private方法都隐式地指定为final的。由于无法读取private方法,所以也就无法覆盖它。可以对private方法添加final修饰词,但这并不能给该方法添加任何额外的意义。
父类有一个private方法,子类的方法即使和父类的方法名字一样,也不属于重写,private只代表他属于本类的一部分。

final类

    当将某个类的整体定义为final时,就表明了你不打算继承该类。注意,final类的域可以根据个人的意愿选择为是或不是final。也就是说如果不是final的,类里面的属性是可以变化的。不论类是否被定义为final,相同的规则都适用于定义为final的域。然而,由于final类禁止继承,所以final类中所有方法都隐式指定为final的,因为无法覆盖它们。

初始化及类的加载


在Beetle上运行java时,所发生的第一件事情就是试图访问Beetle.main(),于是加载器开始启动并找出Beetle类的编译代码(在名为Beetle.class的文件之中)。在对它进行加载的过程中,编译器注意到它有一个基类(这是由关键字extends得知的),于是它继续进行加载。不管你是否打算产生一个该基类的对象,这都要发生。

接下来根基类中的static初始化,然后是下一个导出类,以此类推。这种方式很重要,因为导出类的static初始化可能会依赖于基类成员能否被正确初始化。

至此为止,必要的类都已加载完毕,对象就可以被创建了。首先对象中的所有基本类型都会被设置为默认值,对象引用被设置为null-----这是通过将对象内存设为二进制零值而一举生成的。然后基类的构造器会被调用。然后就是子类的了。
package com.neu.edu.apitest;

public class Beetle extends Insect {
	private int k = Test.printInit("Beetle.k initalized");

	public Beetle() {
		System.out.println("Beetle constructor");
		System.out.println("k = " + k);
		System.out.println("j = " + j);
	}

	private static int x2 = Test.printInit("static Beetle.x2 initialized");

	public static void main(String[] args) {
		
		Beetle b = new Beetle();
	}
}

package com.neu.edu.apitest;

class Insect {
	private int i = 9;
	protected int j = Test.printInit("Insect.j initalized");

	Insect() {
		System.out.println("Insect constructor");
		System.out.println("I = " + i + ", j = " + j);
		j = 39;
	}

	private static int x1 = Test.printInit("static insect.x1 initialLized");
}


打印的结果:
static insect.x1 initialLized
static Beetle.x2 initialized
Insect.j initalized
Insect constructor
I = 9, j = 1
Beetle.k initalized
Beetle constructor
k = 1
j = 39


加载顺序:
1.运行父类的static部分,然后是子类的static部分。
2.父类的变量开始初始化,然后调用构造方法。
3.子类的变量开始初始化,然后调用构造方法。

分享到:
评论

相关推荐

    通信原理:第七章 多路复用.ppt

    通信原理:第七章 多路复用.ppt

    《MIMO-OFDM无线通信技术及MATLAB实现》随书源码-第11章 空间复用的MIMO系统的信号检测.rar

    MIMO-OFDM无线通信技术及MATLAB实现》随书源码。...第7章 PAPR 第9章 MIMO信道容量 第10章 天线分集与空时编码技术第 11章 空间复用的MIMO系统的信号检测 第12章 在发射端利用信道状态信息 第13章多用户MIMO

    计算机二级Python教程 Python语言程序设计 Python基础入门教程-第7章-Python标准库概览 共47页.ppt

    本章为该课程的其中一个章节 【全部课程列表】 第1章-程序设计基本方法 共45页.pptx 第2章-Python语言基本语法元素 共46页.ppt ...第7章-Python标准库概览 共47页.ppt 第8章-Python第三方库概览 共60页.ppt

    计算机二级Python教程 Python语言程序设计 Python基础入门教程-第5章-函数和代码复用 共40页.ppt

    本章为该课程的其中一个章节 【全部课程列表】 第1章-程序设计基本方法 共45页.pptx 第2章-Python语言基本语法元素 共46页.ppt ...第7章-Python标准库概览 共47页.ppt 第8章-Python第三方库概览 共60页.ppt

    C++课件第7章 清华大学老师 郑莉

    《C++课件第7章 清华大学老师 郑莉》的讲解主要围绕C++中的一个重要概念——继承与派生展开。继承是面向对象编程的一个核心特性,它允许我们创建新类(派生类)来扩展或修改已存在的类(基类)的功能,而无需重复...

    Java编程思想笔记(全)

    #### 第 7 章 复用类 第七章探讨了类的继承和复用。继承是一种重要的面向对象特性,允许一个类继承另一个类的属性和方法。本章讲解了如何定义子类、覆盖父类的方法以及使用super关键字调用父类的构造函数等内容。...

    编程思想下篇

    第7章 复用类 第8章 多态 第9章 接口 第10章 内部类 第11章 持有对象 第12章 通过异常处理错误 第13章 字符串 第14章 类型信息 第15章 泛型 第16章 数组 第17章 容器深入研究 第18章 Java I/O系统 第19章 枚举类型 ...

    深入.NET平台和C#编程第七章

    《深入.NET平台和C#编程》第七章的内容涵盖了.NET框架的核心概念、C#语言的高级特性以及如何在实际开发中应用这些技术。本章旨在帮助读者深入理解.NET平台的工作原理,提升C#编程技能,从而更好地利用.NET进行软件...

    Thinking in java4(中文高清版)-java的'圣经'

    非静态实例初始化 5.8 数组初始化 5.8.1 可变参数列表 5.9 枚举类型 5.10 总结 第6章 访问权限控制 第7章 复用类 第8章 多态 第9章 接口 第10章 内部类 第11章 持有对象 第12章 通过异常处理错误 第13章 字符串 第...

    《MIMO-OFDM无线通信技术及MATLAB实现》随书源码-第7章 PAPR.rar

    MIMO-OFDM无线通信技术及MATLAB实现》随书源码。...第7章 PAPR 第9章 MIMO信道容量 第10章 天线分集与空时编码技术第 11章 空间复用的MIMO系统的信号检测 第12章 在发射端利用信道状态信息 第13章多用户MIMO

    数字通信-基础与应用 英文第二版 第1章

    B.Sklar的数字通信-基础与应用第二...第7章 信道编码(二) 第8章 信道编码(三) 第9章 调制和编码的权衡 第10章 同步 第11章 多路复用和多址接入 第12章 扩频技术 第13章 信源编码 第14章 加密和解密 第15章 衰落信道

    使用Java理解程序逻辑第7章.zip

    《使用Java理解程序逻辑》第七章,主要涵盖了Java编程中的一些关键概念和技巧,旨在帮助读者深入理解如何通过Java语言构建有效的程序逻辑。本章内容可能包括但不限于控制流程、循环结构、条件判断、函数(方法)的...

    光纤通信系统课件:13第七章 光波分复用技术.ppt

    其次,扩展光载波的数量也是关键,通过波分复用(WDM)技术,可以在同一根光纤中同时传输多个不同波长的光信号,从而显著提升系统的总体容量。 波分复用(WDM)是一种在一根光纤中利用不同波长的光载波传输多个信道...

    vb作业第七章

    VB作业第七章很可能涉及了VB的基础知识以及一些进阶概念,如事件处理、控件交互和程序流程控制等。 在VB编程中,学习者通常会接触到以下几个关键知识点: 1. **基本语法与数据类型**:VB支持多种数据类型,如...

    C++课程作业从第一章到第七章

    第七章“输入输出流”涉及C++的I/O库,如iostream,包括cin用于输入,cout用于输出。这一章可能讲解了基本的输入输出操作,如读取用户输入,打印输出,以及流的格式控制。 通过这七章的学习,学生将能够建立起对C++...

    Java程序设计基础篇(第8版)第七章编程题答案

    Java程序设计基础篇(第8版)的第七章主要涵盖了面向对象编程的重要概念和技术,包括类、对象、封装、继承和多态等核心主题。在这一章的学习中,编程题通常用于帮助读者深入理解这些概念并提升实际编程能力。下面将...

    Accp6.0 S1 JAVA 理解程序逻辑 第7章

    【标题】"Accp6.0 S1 JAVA 理解程序逻辑 第7章"涉及的是北大青鸟的Accp6.0_S1课程中关于Java编程语言的基础部分,特别是聚焦于程序逻辑的理解。在这一阶段的学习中,学生将深入掌握如何通过Java语言构建和控制程序的...

    软件工程第四章,第七章

    在软件工程领域,第四章和第七章被视为至关重要的章节,它们涵盖了面向对象技术与面向对象分析的核心概念。面向对象(Object-Oriented, OO)方法是现代软件开发中广泛采用的一种设计思想,它极大地提高了软件的可...

    mysql第七章.pdf

    在学习MySQL数据库应用与开发时,第七章通常会介绍编程方面的基础知识,包括但不限于自定义变量、表达式、函数、以及控制流语句等内容。 首先,让我们从自定义变量开始。在MySQL中,变量分为用户会话变量和局部变量...

Global site tag (gtag.js) - Google Analytics