`
李灵晖-raylee
  • 浏览: 135850 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论

从头认识java-6.3 组合使用聚合和继承

 
阅读更多

这一章节我们来讨论一些组合使用聚合和继承

之前已经讲过想过的基础知识以及注意点,现在我们直接上代码:

1.例子

package com.ray.ch05;

public class PlaceSetting extends Custom {
	private DinnerPlate dinnerPlate;
	private Spoon spoon;
	private Fork fork;
	private Knife knife;

	public PlaceSetting(int i) {
		super(i);
		dinnerPlate = new DinnerPlate(i + 1);
		spoon = new Spoon(i + 1);
		fork = new Fork(i + 1);
		knife = new Knife(i + 1);
		System.out.println("done");
	}

	public static void main(String[] args) {
		new PlaceSetting(9);
	}
}

class Plate {
	public Plate(int i) {
		System.out.println("create Plate");
	}
}

class DinnerPlate extends Plate {
	public DinnerPlate(int i) {
		super(i);
		System.out.println("create DinnerPlate");
	}
}

class Utensil {
	public Utensil(int i) {
		System.out.println("create Utensil");
	}
}

class Spoon extends Utensil {
	public Spoon(int i) {
		super(i);
		System.out.println("create Spoon");
	}
}

class Fork extends Utensil {
	public Fork(int i) {
		super(i);
		System.out.println("create Fork");
	}
}

class Knife extends Utensil {
	public Knife(int i) {
		super(i);
		System.out.println("create Knife");
	}
}

class Custom {
	public Custom(int i) {
		System.out.println("create Custom");
	}
}

输出:

create Custom
create Plate
create DinnerPlate
create Utensil
create Spoon
create Utensil
create Fork
create Utensil
create Knife
done


上面就是一个同时使用聚合以及继承的典型的例子。

上面的例子体现了我们之前所说的有参数继承的初始化和聚合对象。

再次强调:编译器不会给对象初始化成new,只会初始化为null,因此这一点大家必须注意。


2.对象的清理以及清理顺序

沿用上一点的代码,然后我们分别在每个类里面加上一个dispose的方法,看看对象的清理以及清理的顺序。

代码:

package com.ray.ch05;

public class PlaceSetting extends Custom {
	private DinnerPlate dinnerPlate;
	private Spoon spoon;
	private Fork fork;
	private Knife knife;

	public PlaceSetting(int i) {
		super(i);
		dinnerPlate = new DinnerPlate(i + 1);
		spoon = new Spoon(i + 1);
		fork = new Fork(i + 1);
		knife = new Knife(i + 1);
		System.out.println("done");
	}

	@Override
	public void dispose() {
		dinnerPlate.dispose();
		spoon.dispose();
		fork.dispose();
		knife.dispose();
		System.out.println("PlaceSetting dispose");
		super.dispose();
	}

	public static void main(String[] args) {
		PlaceSetting placeSetting = null;
		try {
			placeSetting = new PlaceSetting(9);
		} catch (Exception e) {
		} finally {
			placeSetting.dispose();
		}
	}
}

class Plate {
	public Plate(int i) {
		System.out.println("create Plate");
	}

	public void dispose() {
		System.out.println("Plate dispose");
	}
}

class DinnerPlate extends Plate {
	public DinnerPlate(int i) {
		super(i);
		System.out.println("create DinnerPlate");
	}

	@Override
	public void dispose() {
		System.out.println("DinnerPlate dispose");
		super.dispose();
	}
}

class Utensil {
	public Utensil(int i) {
		System.out.println("create Utensil");
	}

	public void dispose() {
		System.out.println("Utensil dispose");
	}
}

class Spoon extends Utensil {
	public Spoon(int i) {
		super(i);
		System.out.println("create Spoon");
	}

	@Override
	public void dispose() {
		System.out.println("Spoon dispose");
		super.dispose();
	}
}

class Fork extends Utensil {
	public Fork(int i) {
		super(i);
		System.out.println("create Fork");
	}

	@Override
	public void dispose() {
		System.out.println("Fork dispose");
		super.dispose();
	}
}

class Knife extends Utensil {
	public Knife(int i) {
		super(i);
		System.out.println("create Knife");
	}

	@Override
	public void dispose() {
		System.out.println("Knife dispose");
		super.dispose();
	}
}

class Custom {
	public Custom(int i) {
		System.out.println("create Custom");
	}

	public void dispose() {
		System.out.println("Custom dispose");
	}
}

输出:

create Custom
create Plate
create DinnerPlate
create Utensil
create Spoon
create Utensil
create Fork
create Utensil
create Knife
done
DinnerPlate dispose
Plate dispose
Spoon dispose
Utensil dispose
Fork dispose
Utensil dispose
Knife dispose
Utensil dispose
PlaceSetting dispose
Custom dispose

从输出结果可以看见,生成对象依然是先父后子,但是清理确相反,先子后父。


当然,大部分的情况我们是不需要手动清理,只需要垃圾回收器自动清理即可。

但是有一点必须注意:当必须手动清理对象的时候,我们千万注意子类与子类、子类与父类等各种聚合和继承关系。


3.一个被多次重载的方法,在子类里面重载机制也是可以运行的。

package com.ray.ch05;

public class DinnerPlate extends Plate {
	public DinnerPlate(int i) {
		super(i);
		System.out.println("create DinnerPlate");
	}

	@Override
	public void dispose() {
	}

	public void dispose(double i) {
	}
}

class Plate {
	public Plate(int i) {
		System.out.println("create Plate");
	}

	public void dispose() {
		System.out.println("Plate dispose");
	}

	public int dispose(int i) {
		return i;
	}

	public float dispose(float i) {
		return i;
	}
}

从上面的代码可以看见,dispose被多次的重载,而且同时也通过不同的方式来重写。


总结:这一章节主要讲述了如何组合使用聚合和继承,以及描述在使用过程中会出现的一些问题。


这一章节就到这里,谢谢。

-----------------------------------

目录


版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    LFS-BOOK-6.3.pdf

    从提供的文件内容来看,LFS 第 6.3 版本由 Gerard Beekmans 编写,版权日期从1999年持续到2007年。文档明确指出,这些材料可以以源代码和二进制形式在满足特定条件的情况下重新分发。这些条件包括保留版权声明、不...

    mchange-commons-java-0.2.11.zip

    在Java开发中,这样的库可以极大地提高开发效率,因为它封装了常见的功能,开发者可以直接使用,而无需从头编写代码。 描述中的 "mchange-commons-java-0.2.11.jar包" 是该库的主要组成部分,是一个Java归档(JAR)...

    eclipse-java-2021-12-R-win32-x86_64.zip

    Eclipse IDE for Java Developers 是一款广泛使用的集成开发环境(IDE),专为Java编程设计。它由Eclipse基金会维护,提供了一整套工具,用于编写、调试、测试和部署Java应用程序。2021-12-R 版本是Eclipse的一个...

    app-datepicker, 使用聚合物从头开始构建的元件.zip

    app-datepicker, 使用聚合物从头开始构建的元件 应用程序 datepicker ( 以前为 jv-datepicker ) 有关详细信息,请参阅组件页 。一个自定义的聚合物元素,从头开始提供一个基于谷歌设计的更具吸引力和丰富性的。实时...

    api-ntrip-java-client-master.zip_android_ntrip_ntrip java实现_ntr

    标题中的“api-ntrip-java-client-master.zip”是一个包含Java实现的NTRIP客户端的源代码压缩包,专门针对Android平台。NTRIP(Networked Transport of RTCM via Internet Protocol)是一种用于实时传输GPS(全球...

    aip-java-sdk-4.2.0

    它的存在意味着AIP Java SDK可能使用Log4j来输出调试信息和错误日志。 2. **aip-java-sdk-4.2.0.jar**:这是核心的AIP Java SDK库文件,包含了所有用于与百度AI平台交互的类和方法。开发者需要引入这个jar文件到...

    aspose-words-java-23.6-jdk17.jar.zip

    Aspose.Words 是一个强大的文档处理库,专为Java开发者设计,用于创建、操作和转换各种文档格式。版本23.6是这个库的一个重要更新,它引入了对Java Development Kit (JDK) 17的支持。这意味着开发人员现在可以利用...

    手把手 - 微服务 Windows 开发环境从头搭建 2022-09-05 直播录像 - 软件安装包-2.zip

    1. **Java编程语言**:微服务通常使用Java作为主要开发语言,因为Java具有跨平台性、稳定性和强大的库支持。 2. **Spring Boot**:许多微服务框架如Spring Boot依赖于Java,Spring Boot简化了创建独立的、生产级别的...

    java-Swing外观包

    Java Swing是Java GUI...通过这个"java-Swing外观包",我们可以方便地引入和使用各种外观风格,提升Java桌面应用的用户体验。在实际开发中,了解和掌握LookAndFeel的使用,对于提高应用程序的专业性和吸引力至关重要。

    Java---笔试题大全

    Java是一种广泛使用的面向对象的编程语言,其特点包括抽象、继承、封装和多态性。在Java笔试中,这些概念经常被考察。 1. **面向对象的特征**: - **抽象**:抽象是将复杂问题简化的过程,分为过程抽象(方法)和...

    使用渲染脚本实现模糊视图背景 - Java - 下载.zip

    2. **示例应用**:可能包含一个简单的Java应用,演示如何使用库来创建模糊视图背景,这对于开发者理解和学习如何使用库非常有帮助。 3. **文档**:可能有README文件或其他形式的文档,解释库的用法、安装步骤、依赖...

    java-多文件上传dome

    在Java编程中,多文件...通过这个"java-多文件上传dome"工具包,你可以快速实现上述功能,无需从头编写所有代码。不过,记得在实际项目中,除了功能实现,还要关注性能、安全性和可维护性,确保应用程序的稳定运行。

    java-master-class-oop-part1:适用于软件开发人员的Java编程大师班(模块6 OOP第1部分-类,构造函数和继承)

    Java编程大师班的“模块6 OOP第1部分 - 类,构造函数和继承”是针对软件开发人员设计的一门深入课程,旨在提升他们对面向对象编程的理解和实践能力。在这个模块中,我们将聚焦于Java语言的核心特性,特别是类、构造...

    java-sdk-master.zip_leancound集成第三方插件_即时通讯

    Java SDK是许多软件开发中的重要组成部分,特别是在与服务器端交互时...通过学习和使用这个SDK,开发者可以迅速在自己的应用中实现稳定、可靠的即时通信功能,而无需从头构建整个通讯系统,大大节省了开发时间和资源。

    java-lib

    在Java编程中,库(Library)是预先编写好的代码集合,程序员可以导入并直接使用,无需从头开始编写所有功能。这些库通常以JAR(Java Archive)文件的形式存在,里面封装了类和方法,可供应用程序调用。Java库广泛...

    curso-java-pildorasInf:从头开始学习Java

    【标题】:“curso-java-pildorasInf:从头开始学习Java” 这门“从头开始学习Java”的课程,源自"PillsInformática"的教育资源,旨在为初学者提供全面的Java编程知识。Java是一种广泛使用的面向对象的编程语言,由...

    Free Spire.Doc for Java - 3.9 无水印

    1. **创建文档**:通过API,开发者能够从头开始构建Word文档,包括添加文本、图片、表格、形状、页眉和页脚等元素。 2. **编辑现有文档**:能够打开和修改现有的DOC或DOCX文件,进行内容替换、格式调整、页面布局...

    ks-java-lib:包含 Java 的 KS 库

    这意味着它可能使用了 Java 核心库中的接口和类,并且遵循了 Java 的编程规范。对于 Java 开发者来说,这样的库是提高生产力的重要资源。 根据压缩包的文件名 "ks-java-lib-master" 可以推测,这可能是一个 Git ...

    java-pdf&word-jar.zip

    首先,`Spire.Doc.jar`是Spire.Doc for Java的库文件,它是一个强大的Java文档处理工具,允许开发者创建、编辑、读取和转换Microsoft Word文档(.doc和.docx格式)。通过Spire.Doc,你可以执行以下操作: 1. 创建新...

Global site tag (gtag.js) - Google Analytics