组合语法/继承语法/代理
复用代码的两种方式
- 第一种是组合,就是在新的类中创建现有类的对象
- 第二种就是继承原有类。
- 第三种是代理,我自己理解的意思,是与组合的一种结合。
结合使用组合和继承
在组合与继承之间选择
protected关键字
- 此关键字指明“就类用户而言”,这是private,但对于继承于此类的导出类或者其他位于同一个包内的类来说,它是可以访问的。
向上转型
- 在eat()方法中,程序代码可以对Animal和它所有的导出类起作用,这种将Dog引用转换为Animal引用的动作,称之为向上转型。
- 向上转型是从一个专用类型向通用类型转换,所有总是很安全的
- 是否使用继承比较清晰的判断方法就是是否需要从新类向基类进行向上转型
final关键字
- 一个永不改变的编译时常量。
- 一个在运行时被初始化的值,而你不希望它被改变。
- 一个即是static又是final的域只占据一段不能改变的存储空间
- final修饰的常量,不同的引用也是可变的(用Random),但同时加static的话,是不可变的
- final类 禁止被继承
初始化及类的加载
- 类的代码在初次被使用时加载,通常指加载发生于创建类的第一个对象时。
- 初次使用之处也是static初始化发生之处,所有的static对象和static代码段都会在加载时依程序中的顺序而初始化。定义为static的东西只会被初始化一次。
加载 - 1.在Demo上运行Java时,所发生的第一件事情就是试图访问Demo.main()(一个static方法),于是加载器开始启动并找出Demo类的编译代码(在名为Demo.class的文件之中)。在对它进行加载的过程中,编译器注意到它有一个基类(这是由关键字extends得知的),于是它继续进行加载。不管你是否打算产生一个该基类的对象,这都要发生。
- 2.如果该基类还有其自身的基类,那么第二个基类就会被加载,如此类推。接下来,根基类中的static初始化(Fu类)即会被执行,然后是下一个导出类,以此类推。这种方式很重要,因为导出类的static初始化可能会依赖于基类成员是否被正确初始化。
- 3.至此为止,必要的类加载完毕,对象可以被创建了。首先,对象中的所有基本类型都会被设为默认值,对象引用被设为null---这是通过将对象内存设为二进制零值而一举生成的。然后,基类的构造器被调用。
网友评论