资讯专栏INFORMATION COLUMN

Java 复用类(7)

darkbaby123 / 2038人阅读

摘要:复用代码是众多引入注目的功能之一。但要想成为极具革命性的语言,仅仅能够复制代码并对之加以改变是不够的,它还必须能够做更多的事情。

复用代码是Java众多引入注目的功能之一。但要想成为极具革命性的语言,仅仅能够复制代码并对之加以改变是不够的,它还必须能够做更多的事情。

1.组合语法

将对象引用置于新类中.

初始化对象引用:1.定义时初始化;2.构造器初始化;3.使用之前(惰性初始化);4.实例初始化(代码块).

2.继承语法

采用extends关键字实现.

采用现有类的类型来创建新类,无需改变现有类的形式.

即使一个类只有包访问权限,其public main仍然是可访问的.

继承并不只是复制基类的接口.当创建了一个当初类的对象时,该对象包含了一个基类的子对象,和直接创建的基类对象是一样的,区别在于,后者来自外部,而基类的子对象被包装在导出类对象内部.

基类初始化:构造器.如果没有,会合成一个默认的构造器,该构造器将调用基类的构造器.

调用带参构造器:super.

调用基类构造器必须是在导出类构造器中要做的第一件事(如果做错了,编译器会提醒).

3.代理

Java语言不支持直接代理.

将一个成员的对象置于所要构造的类中(就像组合),但于此同时在新类中暴露了该成员对应的所有方法(就像继承).

4.结合使用组合与继承

确保正确清理:try{}finally,先清理导出类,在清理基类.

如果Java的基类拥有某个已被多次重载的方法名称,那么在导出类中重新定义个该方法名称并不会屏蔽其在基类中的任何版本.

使用@Override(不是关键字)注解覆盖与基类完全相同的特征签名及返回类型具有相同名称的方法.

5.在组合与继承之间选择

组合和继承都允许在新的类中放置子对象,组合是显示地这样做,而继承则是隐式地做.

组合技术通常用于想在新类中使用现有类的功能而非他的接口这种情形.

在继承的时候,使用某个现有类,并开发一个它的特殊版本.

"is-a"(是一个)的关系是用继承来表达的,而"has-a"(有一个)的关系是用组合来表达的.

6.protected关键字

将某些事物尽可能对这个世界隐藏起来,但仍然允许导出类的成员来访问它们.

就类用户而言,这是private的,但对于任何继承与此类的导出类或其他任何位于同一个包内的类来说,它却是可以访问的(protected提供了包内访问权限).

7.向上转型

将根置于页面的顶端,然后逐渐向下.由导出类转型成基类,在继承图上是向上移动的,因此一般称为向上转型(总是安全的).

在向上转型的过程中,类接口中唯一可能发生的事情是丢失方法,而不是获取它们.

8.final关键字

无法改变的(不想改变的理由:设计或效率).

final数据:对于基本数据类型,final使数值恒定不变;而对用对象引用,final使引用恒定不变(无法改为指向另一个对象,对象自身可以被修改).

static final 域只占据一段不能改变的存储空间,基本用全写大写字母命名.

空白final:声明时为赋值,使用前必须被初始化(提供了更大的灵活性).

final参数:无法在方法中更改参数引用所指向的对象(主要用来向匿名内部类传递参数).

final方法:把方法锁定,防止任何继承类修改它的含义.

类中所有的private方法都隐式地被制定是final的.

覆盖只有在某方法是基类接口的一部分时才会出现,否则,仅具有相同名称(基类方法设置为private是因为它所归属的类的组织结构的原因).

final类:不允许继承(对该类的设计永不需要做任何变动/安全).

不论类是都被定义为final,相同的规则都适用于定义为final的域.

final类中所有的方法都隐式指定为师final的.

忠告:慎用final.

9.初始化及类的加载

在许多传统语言中,程序是作为启动过程的一部分立刻被加载的,然后是初始化,紧接着程序开始运行.

类的代码在初次使用时才加载,即加载发生于创建类的第一个对象之时,或者static域或方法被访问时.

END

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71550.html

相关文章

  • Java编程思想》笔记7.复用

    摘要:在类的构造方法中。对基类构造器的调用必须放到子类构造器的第一行。约定用大写字母下划线命名规范空白空白指被声明为但又未给定初值的域,但可以在构造方法必须在域的定义处代码块或构造器中对进行赋值。 点击进入我的博客 复用代码是Java众多引人注目的功能之一,但要成为极具革命性的语言,仅仅能够复制代码并对之加以改变是不够的,它还必须能够做更多的事情。 7.1 组合 组合语法 就是在当前类中产...

    ningwang 评论0 收藏0
  • 第5章:可复用性的软件构建方法 5.2面向复用的构造

    摘要:代码使用泛型类中不依赖于类型参数的方法。委托依赖于动态绑定,因为它要求给定的方法调用可以在运行时调用不同的代码段。委托捕获操作并将其发送给另一个对象。委托可以被看作是在对象层次上的复用机制,而继承是类层次上的复用机制。 大纲 设计可复用的类 继承和重写 重载(Overloading) 参数多态和泛型编程 行为子类型与Liskov替换原则 组合与委托 设计可复用库与框架 API和库...

    DevTalking 评论0 收藏0
  • java jar打包使用总结(一)

    摘要:背景介绍将程序打包,无论是为了代码复用,还是发布应用,都是必不可少的的技能,上次总结了一下利用打包成,这次我来说如何打包。导入往往我们使用打包不只是为了双击使用,有时也是为了代码复用。碍于时间关系,将留待下一篇文章进行总结。 背景介绍 将程序打包,无论是为了代码复用,还是发布应用,都是必不可少的的技能,上次总结了一下python利用cxfreeze打包成exe,这次我来说java如何打...

    Blackjun 评论0 收藏0
  • 我的JAVA学习

    摘要:学习笔记方法方法就是一个功能块返回数值,结束方法方法定义格式修饰符方法返回类型方法名形参列表方法传值值传递,没有引用传递面向对象以类的方式组织代码,以对象的方式组织类对对象的抽象对象具体的事物对象以类为模板以类的方式组织代码,以对象的方式组 JAVA学习笔记 1.方法 方法就是一个功能块 return ,返回数值,结束方法 方法定义格式: [修饰符] 方法返回类型 方法名(形参列表...

    Caizhenhao 评论0 收藏0
  • java.io (2) 输入流的复用

    摘要:输入流的复用在实际的开发中是很常见的场景。根据对的抽象,流的复用是矛盾的。检查当前流类是否支持标记功能这三个方法能有效地解决流复用的问题。 输入流的复用在实际的开发中是很常见的场景。 在实际应用中,很多需要提供输入数据的API都是用IputStream类作为其参数类型,比如XML文档的解析API就是一个典型的例子。同时很多数据的提供者允许使用者通过InputStream类的对象方式来...

    kun_jian 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<