《Java编程思想》笔记之第7章——复用类

本文介绍了Java中类复用的两种主要方法——组合与继承,并解释了它们的应用场景及区别。此外还探讨了final关键字的作用,包括final数据、final参数、final方法和final类的使用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java类复用的两种方法:

第一种:只需在新的类中产生现有类的对象。由于新的类是由现有类的对象所组成,所有这种方法称为组合。该方法只是复用了现有程序代码的功能,而非它的形式。

第二种:按照现有类的类型来创建新类。无需改变现有类的形式,采用现有类的形式并在其中添加新代码。这种神奇的方式称为继承,而且编译器可以完成其中大部分工装。继承是面向对象程序设计的基石之一。

初始化基类

在构造器中调用基类构造器来执行初始化,而基类构造器具有执行基类初始化所需要的所有知识和能力。Java会自动在导出类的构造器中插入对基类构造器的调用。

名称屏蔽

@Override注解可以防止在不想重载时而意外的进行了重载。

组合与继承之间选择

组合和继承都允许在新的类中防止子对象,组合是显式的,继承是隐式的。

在继承的时候,使用某个现有类,并开发它的一个特殊版本。通常,这意味着你在使用一个通用类,并为了某种特殊需要而将其特殊化。“is-a”(是一个)的关系是用继承来表达 ,而“has-a”(有一个)的关系则是用组合来表达。

向上转型

“为新的类提供方法”并不是继承技术中最重要的方面,其最重要的是用来表现新类和基类之间的关系。这种关系可以用“新类是现有类的一种类型”这句话加以概括。

package javaBCSK;

class Instrument{
    public void play(){}
    static void tune(Instrument i)
    {
        i.play();
    }
}
public class JavaBCSX extends Instrument{
    public static void main(String[] args) {
        JavaBCSX j = new JavaBCSX();
        Instrument.tune(j);
    }
}

在此例中,tune() 方法可以接受Instrument引用。但在JavaBCSX.main()中,传递给tune() 方法的是一个Wind引用。这种动作称之为向上转型。

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

final关键字

final数据

final数据作用:

  1. 一个永不改变的编译时常量。 
  2. 一个在运行时被初始化的值,而不希望它被改变。

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

final参数

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

final方法

使用final方法的原因有两个。第一个原因是把方法锁定,以防止任何继承类修改它的含义。这是出于设计考虑:想要确保在继承中使方法行为保持不变,并且不会被覆盖。

过去建议使用final方法的第二个原因是效率。在Java的早起实现中,如果将一个方法指明为final,就是同意编译器将针对该方法的所以调用都转为内嵌调用。当编译器发现一个final方法调用命令时,它会根据自己的谨慎判断,跳过插入程序代码这种正常方式而执行方法调用机制,(将参数压入栈,跳至方法代码处并执行,然后跳回并清理栈中的参数,处理返回值),并且以方法体中的十级代码的副本来替代方法调用。这将消除方法调用的开销。当然,如果一个方法很大,你的程序代码就会膨胀,因而可能看不到内嵌带来的任何性能提高,因为所带来的性能提高会因为花费于方法内的时间量而被缩减。

但是现版本的Java中虚拟机(特别是Hotspot技术)可以探测到这些情况,并优化去掉这些效率反而降低的额外的内嵌调用,因此不需要使用final方法来进行优化了。所以,现在只有在想要明确禁止覆盖时,才将方法设置为final。

final类

当将某个类的整体定义为final时,就表明了你不打算继承该类,而且也不允许别人这样做。

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
























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值