美文网首页
JavaSE梳理六:复用类

JavaSE梳理六:复用类

作者: 今天比昨天努力 | 来源:发表于2019-11-07 20:11 被阅读0次

    1,初始化对象引用

    1,在定义对象的地方,优先于构造器被初始化

    2,在类构造器中

    3,在使用对象之前,惰性初始化。可以减少额外负担。

    2,继承(is-a)

    继承可以被视为对类的复用。继承不只是复制基类的接口。

    调用基类构造器是在导出类构造器中要做的第一件事。

    使用一个现有类去开发一个他的特殊版本。也可以理解为:使用一个通用类,为了某种特殊需要将他特殊化。所以是一个的关系

    注意:编译器会强制初始化基类,并且要求在构造器起始处就要这么做,但是他不会监督你初始化成员对象。

    为了继承,一般的规则:将所有的数据成员都指定为private,将所有的方法都指定为public。

    3,代理

    继承(is-a)与组合(has-a,只需要将对象应用置于新类中即可)的中庸之道。继承会把基类所有的方法都在导出类中暴露出来。代理可以选择只提供在成员对象中的方法的某个子集。

    4,清理

    如果需要进行清理,最好是编写自己的清理方法,不要使用finallize(),因为你不知道垃圾回收器什么时候去回收。

    5,名称屏蔽

    如果基类拥有某个已被多次重载的方法名称,在导出类中重新定义该方法名称并不会屏蔽在基类的任何版本。因此,无论在导出类还是基类中对方法进行定义,重载机制都可以正常工作。JavaSE5新增注解@Override,表明覆写方法。

    6,向上转型

    “为新的类提供方法”并不是继承技术中最重要的方面,最重要的是表现导出类和基类之间的 关系(关系:派生类是基类的一种类型)。由导出类转型成基类。总是很安全因为是专用类型转换为通用类型,但是派生类必须至少具有基类中所有的方法。

    7,Final关键字

    出于考虑:设计或效率。所以不想做出改变。适用于:数据,方法,类。

    数据:永不改变的编译时常量(必须是基本类型,static和final修饰的一般是大写)。一个运行时被初始化的值不希望被改变。定义为Public可以用于包外,定义为static强调只有一份,定义final说明是一个常量。Final数据不一定在编译时就初始化,也可以在运行的时候初始化,但是只可以初始化一次;可以理解为final数值分为静态和非静态,非静态的在声明的时候就必须初始化,但是如果时静态的可以在运行的时候被初始化。

    :用于对象引用,final使引用恒定不变。然而对象本身是可以修饰的,Java并未提供任何对象恒定不变的途径。这一现象也适用数组。

    空白final:域被声明为final但是没有给定初值。但是在使用前必须被初始化。如果没有在域的定义处给定值,那么就必须在构造器中给final域进行赋值。这就是final域在使用前总是被初始化的原因所在。

    Final参数:无法在方法中更改参数引用所指向的对象。可以读参数,但是无法修改参数。这一个特性主要用来向匿名内部类传递数据。

    final方法:使用原因:设计:方法锁定防止任何继承类修改它的含义,行为不变,不会被覆盖;效率:同意编译器将针对final方法的所有调用都转为内嵌调用。主要表现在:跳过插入程序代码(将参数压入栈,跳至方法代码处并执行,然后跳回并清理栈里的参数,处理返回值),并且以方法体中的实际代码的副本来替代方法调用。消除方法调用的开销。

    默认情况下,类中所有的private方法都隐式的指定为final。

    覆盖:发生在方法是基类的接口的一部分。也就是必须能将一个对象向上转型为它的基本类型并调用相同的方法。如果方法时private的就不是基类的接口一部分。只是隐藏于类中的程序代码,只不过是相同的名称。

    final类:不能继承final类,final类中的域可以选择是否是final。但是由于final类禁止继承,所以final类中的所有方法不管是不是final修饰默认都是final,即使给方法添加final,也不会增加任何意义。

    加载:每个类的编译代码都存在于他自己的文件中,这个文件只有在需要使用程序代码时才会被加载。一般来说,类的代码在初次使用才会被加载或者访问static域或static方法也会发生加载。

    总结:继承和组合都能从现有类生成新类型。组合一般是将现有类作为新类型底层实现的一部分加以复用,而继承复用的是接口。

    相关文章

      网友评论

          本文标题:JavaSE梳理六:复用类

          本文链接:https://www.haomeiwen.com/subject/xkgvbctx.html