zoukankan      html  css  js  c++  java
  • 复用类即多态性的体现

    一,继承语法

    1,成员默认的访问权限是包,包内其他类都可以访问;而继承其他的类只能访问public成员;为了继承,一般性规则是,把数据成员变量设置为private,使之不能被访问

    2,继承的方法被覆盖之后不能在本方法直接被调用,否则会产生递归,这不是我们期望看到的结果,一般情况下会使用super调用基类版本的方法

    3,在继承过程中,不一定非要使用基类的方法,也可以添加新的方法和变量

    4,初始化,构建过程是从基类向导出类扩散的,但是使用的是默认的无参数构造器

    5,如果想调用有参数的构造器,就必须用关键字super显示的调用基类构造器,并配以适当的参数列表;而且调用基类构造器必须是你导出类构造器所做的第一件事,如果你错了,编译器会提醒你

    二,代理

    Java没有提供对他的直接支持,是继承和组合的中庸之道。如果直接使用继承会暴露基类中的所有方法。用代理的话,不会继承基类中的方法,但是会建一个基类成员对象,也会在本类中建立与基类中相同的方法,通过这些方法名相同的方法调用基类中的方法。(事实上不应该称之为基类);

    析构函数是一种在对象被销毁时可以被自动调用的函数,而在Java中没有这种函数的概念

    有时候类需要可能要在其生命周期之内执行一些必要的清理活动。正如在前面的《初始化与清理》中所说,你并不知道垃圾回收器什么时候慧会被调用,甚至会不会被调用。因此如果你想清理一些东西,,就必须显示的编写一个特殊的方法来做这件事,并且要确保客户端程序员知晓他们必须要调用这个方法。

    在本类清理方法总还必须注意基类清理方法和成员对象清理方法的调用顺序,以防止某一个子对象依赖于另一个子对象的情况发生。一般而言,先执行类的所有特定的清理动作,其顺序与生存的顺序正好相反(通常这就要求基类对象任然存活),然后就是调用基类的清理方法

    需要注意,除了内存之外,不能依赖垃圾回收器去做任何事。如果需要处理,最好是编写你自己的清理方法,但不要使用finalize

    在导出类中重载一个基类中的方法,完全不影响基类中重载方法的使用,而@Override可以防止在你不想要重载时进行了重载

    {CompileTimeError}标签。。。。未完,待续

    三,在组合和继承之间选择

    组合技术通常用于想要在新类中使用现有类的功能而非它的接口,新类的用户看的是新类定义的接口而非所嵌入对象的接口,为实现此,在成员对象之前加上private

    但是有时候使用public来修饰从更远对象是有意义的,有助于客户端程序员更好的了解怎么去实使用类,也降低了类开发者所面临的代码复杂度

    继承关系表达的是is-a,组合表达的是has-a

    子对象:驻留在另一个对象中的对象,在一个类的定义中,声明另一个类的对象来作为成员变量

    组合技术就是在新类之中嵌入某一个现有的类,最好是private修饰的

    protected修饰的类成员,对于类用户来说他是private,但是对于同一个包内的或者导出类而言他却是可以访问的,但是最好还是修饰成员变量为private,你应该一直保留修改底层实现的权利,用protected来控制类的继承者的访问权限

    四,向上转型

    基类中有的方法,导出类也有,可以确保向上转型可以进行。

    从一个较专用转换为一个较普通类型

    继承要慎用,其使用场合仅限于该技术确实有效的情况下,一个清晰的判断方法是问一问自己是否需要进行向上转型

    五,final

    可以用来定义编译器常量,在编译器就可以把常量值代入计算式,并执行,这样就减轻了一些运行时负担。这些常量必须是基本数据类型

    一个即是static又是final修饰的域只是占用了不能改变的存储空间,定义为static一位置只有一份

    对于对象引用,final使之引用恒定不变,,一旦引用被初始化指向一个对象,,就无法把他改为指向另一个对象,然而对于对象自身却是可以修改的,Java并未提供使任何对象恒定不变的途径,这一限制同样适用于数组,他同样是对象

    也可以在参数列表中使用final,以为着无法再方法中改变引用所指向的对象

    使用final方法,一个原因是效率,如果一个方法被指定为final,那么就是同意编译器针对该方法的所有调用,都转为内嵌调用,另一个原因是防止被子类覆盖

    但是在Java的最近版本中,已经不需要final的优化机制,应该让编译器和虚拟机来处理优化问题。

    由于private方法默认是final修饰,无法触及而且能有效隐藏,所以除了把他看成是 因为它所属的类的组织结构的原因而存在外,其他任何事物都可以不考虑它

    final类表明不打算继承该类,也不打算对其作出改变,也不允许别人这样做,或者出于安全的考虑,不希望它有子类

  • 相关阅读:
    MapReduce程序遇见java.net.UnknownHostException
    吐槽下《Hadoop权威指南(第二版)》的翻译
    HFileOutputFormat与TotalOrderPartitioner
    关于hive multi group by的疑惑
    Hive解决 java.io.IOException:SerDeException:LazySimpleSerDe
    一个字符编码引发的血案
    CSS颜色代码大全
    C#中ParameterizedThreadStart和ThreadStart区别
    Sql Server REPLACE函数的使用
    QueryString的用法
  • 原文地址:https://www.cnblogs.com/QianYue111/p/10182199.html
Copyright © 2011-2022 走看看