thinking in java笔记 7 复用类


======================================================
注:本文源代码点此下载
======================================================

组合与继承

两者都允许在新的类中放置子对象,组合显式,继承隐式。

组合通常用于想在新类中使用现有类的功能而非接口的情形。是has-a关系。

继承使用现有类(通用类),并开发一个特殊版本(特殊化)。是is-a关系。

在oop中,最可能用的是直接将数据和方法包装进一个类中,然后使用此对象。也可以运用组合使用现有类来开发新的类,但继承是不常用的。判断使用组合还是继承,最好地方法是判断是否需要从新类向基类进行向上转型操作。

protected

作用是将某些事物尽可能对这个世界隐藏,但仍允许导出类的成员访问它们(有包访问权限)。

尽管可以创建protected域,但更好的方式是域为private,通过protected方法控制导出类的访问权限。(为自己保留更改底层实现的权利)

向上转型

由于继承可以确保基类中所有的方法在导出类中同样有效,所有能够向基类发送的所有消息同样也可以向导出类发送。将导出类引用转换为基类引用的动作称为向上转型。导出类是基类的一个超集,向上转型时,类接口中可能会丢失方法,但是是安全的。

final

final是指“这是无法改变的”,原因可能为:设计或效率。由于两者差之甚远,因此可能被误用。final使用的情况:数据、方法和类。

final数据:

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

一个static final域只占据一段不能改变的存储空间。域名全部大写,用_隔开。

对于基本类型,final使数值恒定不变,对于对象引用,final使引用恒定不变。一旦初始化指向一个对象,就不能指向另外的对象,但对象本身的值是可以改变的。

空白final:被声明为final但未给定初值的域。它使得类中的final域可以根据对象不同而有所不同,但又保持恒定不变。如在构造函数内根据参数进行初始化。

final参数:

可以在参数列表中将参数声明为final,在方法中无法更改参数引用所指向的对象。这一特性主要向匿名内部类传递数据。

final方法:

原因:把方法锁定,防止继承类修改,确保在继承中使方法行为保持不变,并且不会被覆盖。

private方法都隐式地制定为final。

final类:

类定义为final时,此类不可被继承。对类的设计永不需要做任何变动,或者出于安全考虑,不希望它有子类。final类的域不受类的final影响,而final类中的方法因不可继承,默认全是final的,不管有没有final关键字。

初始化及类的加载

java不会出现static变量之间加载顺序的依赖问题。java的所有事物都是对象,每个类的编译代码都存在于独立的文件中,该文件只在需要使用程序代码时才会加载。构造器也是static方法,类是在其任何static成员访问时加载的。

加载顺序:

0 .在做任何事情之前,将分配给对象的存储空间,初始化成二进制的0,或null。

1.父类静态成员和静态初始化块,按在代码中出现的顺序依次执行

2.子类静态成员和静态初始化块,按在代码中出现的顺序依次执行

3.父类实例成员和实例初始化块,按在代码中出现的顺序依次执行

4.父类构造方法

5.子类实例成员和实例初始化块,按在代码中出现的顺序依次执行

6.子类构造方法


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值