Java4Android之复用类

简介:

本节内容是对《Thinking in Java》中第七章 复用类的笔记和总结

1 , 复用现有的代码而不去破坏现有的代码,有两种方法:组合和继承。

2,toString()方法。在类需要转变成String对象的时候,就会调用该函数。例如有个A类的对象a , A a ;然后有语句 ”object:“+a;这时候其实是"object:"+a.toString();

3,惰性初始化。成员的初始化有很多种,我们在之前的学习中知道,如果是基本数据类型没有初始化,则会被初始化一个默认的纸,例如int的会被初始化为0;而如果是对象引用,则会被初始化为null。在定义处的初始化要比构造函数的初始化还要早,但它只能实现千遍一律的初始化。静态成员的初始化是在类加载的时候就初始化了,这个更早。对初始化代码还可以用花括号独立起来,这个和在定义处初始化是一个效果。而惰性初始化是”在你要用到该成员的时候,初始化,然后再使用“。这种延缓的初始化往往可以减少负担。因为需要才初始化嘛。

4,Java中类的继承是通过extends来实现的,继承后的派生类拥有基类的所有成员和方法。

5,每个类都可以配备一个public static void main(String[] args)方法,可方便单元测试。多个类同时拥有main函数也是没有问题的,只有命令行调用的那个main函数才会被执行。还有就算类是四有类,它的main函数也是可以被任意调用的。
6,想调用基类的成员,需要通过super.xxx();否则如果在xxx()中再掉xxx()则是递归,很明显你不是这个意思吧。

7,当创建一个导出类的对象时,该对象包含了一个基类的子对象。这个子对象与你用基类直接创建的对象是一样的。

8,带参数的构造器。

如果没有默认的基类构造器,或者想调用一个带参数的基类构造器,就必须用关键字super显式的编写调用基类构造器的语句,并且配以适当的参数列表。调用基类构造器必须是你导出类构造器要做的第一件事情(除你调用this调用其他自己构造其外)。

9,代理。代理是继承和组合之间的中庸之道。因为我们将一个成员对象置于所要构造的类中(就像组合),但与此同时我们在新类中暴露该类成员对象的所有方法(就像继承)。

10,名称屏蔽。注意区分C++和Java对重载和覆写的不同处理。Java中一般都是重载,如果非得覆写,注意在函数前面加上@Override,则会覆写基类的函数。否则都是重载。

11,在组合和继承之间选择。组合和继承都是在新的类中放置子对象,组合是显式的这么做,而继承是隐式的。如何选择?组合技术常用于在新类中是有现有类的功能而非它的接口。即,在新类中嵌入某个对象,让其实现所需要的功能,但新类的用户看到的只是新类定义的接口,而非嵌入对象的接口。这个时候,一般在新类中嵌入一个现有类的private对象。但有时候也可以是public(很少),public意味这外部可以访问该成员,可能是为了便于理解吧。

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

12,protected关键字

“就用户而言,这是private的,但对于继承于此类的导出类或者其他任何位于同一个包内的类来说,它却是可以访问的”。

在设计上,最好的方式还是将域保持为private,你应该一直保留“更改底层实现”的权利,然后通过protected方法来控制类的继承者的访问权限。

13,向上转型

“为新的类提供方法”并不是继承技术中最重要的方面,其最重要的方面是用来表现新类和基类之间的关系。这种关系可以用“新类是现有类的一种类型”来概括。为什么叫向上转型,因为之前的类图结构总是把基类放到上面,所以就习惯了。向上转型是将一个较为专用的类型向较为通用的类型转换,所以总是很安全的。导出类是基类的一个超类,因为它总是包含了基类的所有,同时还可能拥有更多的方法和域。

如果某个方法为private,那它就不是类 的接口一部分。也就是向上转型的时候调不到它的。

14,final关键字

final可以修饰数据,修饰方法,类。

1)final数据。final修饰变量是使得其不会改变,类似于C++的常量,static final经常这样用,表示只有一份内存。final修饰的域不一定要在定义处初始化,可以在要用的时候初始化,这种叫“空白 final”有点类似于惰性初始化。初始化之后就改变不了它了。final修饰的引用表示你不能将该引用指向新的对象,但是对象本身的数据却还是可以变化的。final参数是指你不能在这个方法里面更改这个参数(或者引用重指),这种final参数主要是用在向匿名内部类传递数据 的时候用到。

2)final方法。把方法锁定,以防止任何继承类修改它的含义,即不会被覆盖掉。

final 和private关键字。类中所有的private方法都隐式的指定为final的。因为导出类无法取用private方法,所以也就无法覆盖它。

“覆盖”只有在某个方法是基类的接口的一部分时才会出现。如果一个方法是private,那它就不是基类接口的一部分。它仅是隐藏于类中的程序代码,只不过是有相同的名字而已。仅此。

3)final类。一个类被修饰为final,表示你不想任何类继承它。当然final类里面 的final域之类的,跟普通类里面的没有区别。不影响

15,初始化与类的加载

static代码是在类被第一次使用的时候加载的。假如两个类A,B,B extens A .那么当B对象生成的时候,首先运行基类A的static代码,然后是B的static代码,然后当这些类代码都执行完之后,对象就可以创建了。也就是执行对象相关代码。

好,今天到这里。


相关文章
|
Java 编译器 API
Java 密封类:精细化控制继承关系
Java 密封类:精细化控制继承关系
606 83
|
IDE Java 数据挖掘
Java 基础类从入门到精通实操指南
这份指南专注于**Java 17+**的新特性和基础类库的现代化用法,涵盖开发环境配置、数据类型增强(如文本块)、字符串与集合处理进阶、异常改进(如密封类)、IO操作及实战案例。通过具体代码示例,如CSV数据分析工具,帮助开发者掌握高效编程技巧。同时提供性能优化建议和常用第三方库推荐,适合从入门到精通的Java学习者。资源链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
743 37
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
589 101
|
安全 Java 开发者
Java记录类:简化数据载体的新方式
Java记录类:简化数据载体的新方式
463 100
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
710 143
|
11月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
499 4
|
11月前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
452 5
|
11月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
579 5
|
11月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
585 1
|
11月前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
608 1