`

复用类(组合、继承)

 
阅读更多

1. 组合 composition

在新的类中产生现有类的对象,由于新的类是由现有类的对象组成,所以这种方法称为组合(composition)。

2.继承 inheritance

 

缺省构造器: 构造器不带参数(argument)。

带参数的构造器:你的类没有缺省的参数,或者是你想调用一个带有参数的构造器,必须用super显试地编写调用基类构造器。

protected  ,声明类方法,子类能继承

 

关键字

 final

final 应用的情况: 数据、方法和类

1. final 数据    永恒不变的数据

     &  它可以使一个永不改变的"编译期常量" (compile-time constant)

     &  它可以使一个在运行期被初始化的值,而你不希望它被改变。

# 原始类型: final 使数值恒定不变,

# 对象引用: final  使引用恒定不变,一旦引用被初始化指向一个对象,就无法对它进行改变以指向另一个对象。然而,对象其自身却是可以被修改的。

 

空白final

 

Java允许生成空白final(Blank final),即空白final是指被声明为final但又未给定初始值得数据成员。

注意: 编译器都确保空白final在使用前必须被初始化。但是,空白final在关键字final 的使用上提供了更大的灵活性。为此,一个类中的final数据成员就可以实现依据对象而有所不同,却又保持恒定不变的特性。

 

意思就是,空白final ,在构造函数中赋值。

 

final 参数

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

 

 

final 方法

使用final方法的原因有两个。第一个原因是把方法锁定,以预防任何继承类修改它的意义。

第二个原因是效率。如果你将一个方法指明为final,就是同意编译器将针对该方法的所有调用都转为内嵌(inline)调用。

final 和private : 类中的所有private方法都是被隐含是final的。

 

private 方法不能被重载overloading ,如果子类中有同priavate 同名的方法,则子类中的方法是子类增加的新方法。

 

final 类 

final 类的成员: 可以使final,也可以不是final。

final类的方法:被隐含是final的

 

面向对象特征:

抽象 : 抽象为类

封装: 通过合并特征和行为来创建新的数据类型。

继承:

多态(polymorphic):也称为   动态绑定 dynamic binding、后期绑定 late binding、运行时绑定 run-time binging

 

抽象类(abstract class):包含 abstract method 的类叫做抽象类。

        抽象类中可以没有抽象方法。

        抽象类不能创建对象。

        继承抽象类,必须实现所有的抽象方法,否则,子类也是抽象类。

抽象方法(abstract method) :仅有声明而没有方法体。

abstract void f();

 

 

构造器 和多态 

 

       构造器不具有多态性 (实际是 static方法,只不过该static声明是隐式的)

 

构造器调用顺序

1.在其他任何事物发生前,将分配给对象的存储空间初始化成二进制的零。

1. 调用基类构造器,这个步骤会不断反复的递归下去,首先是构造这种层次结构的根,然后是下一层导出类,等等。知道最底层的导出类。

 

2. 按声明顺序调用成员的初始化状态设置模块。(需要通过程序来证实----后续)

3. 调用导出类构造器的主体。

 

 

 

分享到:
评论

相关推荐

    【JavaScript源代码】简单谈谈JavaScript寄生式组合继承.docx

    简单谈谈JavaScript寄生式组合继承  组合继承也被称为伪经典继承,它综合了我们昨天说的原型链和盗用构造函数,将俩者的有点结合在了一起。它的基本思想是使用原型链继承原型上的属性和方法,通过盗用构造函数继承...

    简单谈谈javascript代码复用模式

    代码复用有一个著名的原则,是GoF提出的:优先使用对象组合,而不是类继承。在javascript中,并没有类的概念,所以代码的复用,也并不局限于类式继承。javascript中创建对象的方法很多,有构造函数,可以使用new创建...

    Javascript组合继承方法代码实例解析

    组合继承 组合继承,指将原型链和借用构造函数的技术组合到一块,从而发挥二者之长的一种继承模式。其背后思路使用用原型链实现对原型属性和方法的继承,而通过构造函数来实现对实例属性的继承。这样,即通过在原型...

    Java编程复用类代码详解

    主要介绍了Java编程复用类代码详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

    设计模式:可复用面向对象软件的基础--详细书签版

    当我们提及“类型”和“多态”,或“接口”继承与“实现”继承的关系时,你应该对这些概念了然于胸,而不必迫不及待地翻阅手头的字典。    另外,这也不是一篇高级专题技术论文,而是一本关于设计模式的书,它...

    C++中继承与组合的区别详细解析

    C++的“继承”特性可以提高程序的可复用性。正因为“继承”太有用、太容易用,才要防止乱用“继承”。我们要给“继承”立一些使用规则: 一、如果类A 和类B 毫不相关,不可以为了使B 的功能更多些而让B 继承A 的功能...

    java课程资源第六章

    复用类 组合、继承:语法、选择、使用 protected关键字 向上转型 Final关键字 初始化与类加载

    C++中的继承和组合区别使用

    C++的“继承”特性可以提高程序的可复用性。正因为“继承”太有用、太容易用,才要防止乱用“继承”。我们要给“继承”立一些使用规则:  一、如果类A 和类B 毫不相关,不可以为了使B 的功能更多些而让B 继承A 的...

    js常用的继承–组合式继承

    组合继承有时候也叫伪经典继承,指的是将原型链和借用构造函数技术组合到一块,从而发挥二者之长的一种继承模式,其背后的思路是使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。...

    JavaScript代码复用模式详解

    优先使用对象组合,而不是类继承 在js中,由于没有类的概念,因此实例的概念也就没多大意义,js中的对象是简单的键-值对,可以动态的创建和修改它们。 但在js中,我们可以使用构造函数和new操作符来实例化一个对象,...

    Android 组合控件实现布局的复用的方法

    比较好的一种做法是使用include标签,复用同一个xml文件来实现布局的复用。但是这种方法是通过代码的方式来设置标题,左右按钮等其他的属性,会导致布局属性和Activity代码耦合性比较高。 因此,我们要通过自定义...

    PHP 实现代码复用的一个方法 traits新特性

    Traits 和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承和混入类(Mixin)相关的典型问题。 Trait 和一个类相似,但仅仅旨在用细粒度和一致的方式来组合功能。Trait 不能通过它自身来实例化。它为传统...

    thinkinjava源码-Think-In-Java-Code:ThinkingInJava(第四版)书中源码以及课后练习代码

    复用类 7.1 组合语法 7.2 继承语法 7.2.1 初始化基类 7.3 代理 7.4 结合使用组合和继承 7.4.1 确保正确清理 7.4.2 名称屏蔽 7.5 在组合与继承之间选择 7.6 protected关键字 7.7 向上转型 7.7.2 再论组合与继承 7.8 ...

    c.c++找工作面试重点结构图-mindmanager

    在继承中产生歧义的原因有可能是继承类继承了基类多次,从而产生了多个拷贝,即不止一次的通过多个路径继承类在内存中创建了基类成员的多份拷贝。虚基类的基本原则是在内存中只有基类成员的一份拷贝。这样,通过把...

    设计模式之禅之+组合模式

    关的对象,以适当的粒度将它们归类,再定义类的接口和继承层次,建立对象之间的基本关 系。你的设计应该对手头的问题有针对性,同时对将来的问题和需求也要有足够的通用性。 你也希望避免重复设计或尽可能少做重复...

    java三大特性说明

    组合复用:选取某个类型中的一个对象的方法实现作为该类的方法实现过程,这两个类也称为理论父类和理论子类. 程序中是不出现extends关键字对两个类关系的描述的.  通过具体实例抽象出父类的过程称为泛化  通过...

    【java编程思想第五版笔记】第八章复用(更新中)

    【java编程思想第五版笔记】第八章复用(更新中)面向过程和面向对象复用的区别:组合的语法关于上面的程序的解析初始化引用有四种方法:继承语法 更新自2020.04.22 代码复⽤是⾯向对象编程(OOP)最具魅⼒的原因之⼀...

    hydgladiator#BigData-Doc#类加载器1

    (父子关系一般不会以继承的关系实现,而是以组合关系来复用父加载器的代码)工作过程如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请

    Java复用、多态&接口

    可以为每一个类都创建main()方法,便于单元测试  当创建一个导出类的对象时,该对象包含一个包装在导出类对象内部的基类对象,所以java会自动的在...  代理:介于继承与组合,我们将一个成员对象置于所要构造的类

Global site tag (gtag.js) - Google Analytics