Think in java 学习手记(三)
来源:互联网 发布:锐度男士 知乎 编辑:程序博客网 时间:2024/05/01 18:32
Chap 8 接口与内部类
1、接口与抽象类
接口是一种更纯的抽象形式。
接口的实现类必须用public 声明接口方法。而且必须声明这些接口方法。
接口中声明的方法根本没有方法体。例如:抽象类中定义int a(){};而接口中定义为:int a();
同抽象类一样,接口照样可以定义成员变量。
2、接口与抽象类的选用
接口与抽象类在很大程度上可以互相取代,但应该优先使用接口,因为其含义更明确。更重要的是:它能够实现多重继承。
3、用接口实现enum
java没有enum,而接口里的变量自动是final和public和static的,所以可以直接将常量写进接口,来模拟enum。
4、接口嵌套
接口可以嵌套在另一接口中,也可以嵌套在一个类中。当然目前我还没有发现这种做法的用途。
5、内部类的定义
可以在:类的内部、方法的内部、甚至结构块内部单独定义一个类。
可以在类外定义接口,然后用内部类实现接口。调用的时候采用上传的方法进行。这样就完全隐藏了接口的实现。
内部类可以调用宿主类的成员(各种权限的),也就是默认内部类与宿主类存在某种联系。如果你不想要这种联系,即不想让内部类调用宿主类的非static参数,你应该将内部类设成static的——这就是嵌套类。只有在嵌套类里,可以调用宿主类的static成员,也可以设置自己的static成员。
嵌套类可以是接口的一部分,如下所示:
public interface II{
static class Inner{
int I;
int j;
int value(){};
}
}
内部类的引用:在宿主类里要引用内部类,必须给出宿主类的reference。如:
class A{
class AA{}
public static void main(String args[])
A.AA aa = new A().new AA();
}
注意上面那行:A.AA aa = new A().new AA()。绝不能是new A.AA()。即只能用宿主类的对象来创建内部类的对象。这是可以想象的:没有宿主类的实例,哪来内部类?
当然,上述例子对于嵌套类来说,就简单多了,只需AA aa = new AA();
至于内部类的继承等,就不必深究了——实际用得并不多。
6、匿名内部类
据说能很好地解决多重继承(抽象类或类)的问题。当然多重继承接口的问题不需要它。这里还需要多总结。尽管作者讲了N多好处,还是不太明白到底有什么用——主要是他没结合实例去讲,而只是在语义上讲它的便利。
匿名内部类必须是一个派生类。
关于匿名内部类的参数:凡是在内部类内部使用的参数全部应设成final。而只是通过基类构造函数调用的,则不需要。
7、回调callback
给某个对象一段信息,在某个时段,反过来调用发起调用的原始对象。说得更简单些,就是你写一个方法,而这个方法会被别的程序自动调用。例如main(),再如线程的start()会自动调用run()。而在java中,回调是通过内部类来实现的。
Chap 9 异常
1、关于System.out 和 System.err
对于异常来说,最好将错误送到System.err为好。因为out可能会被重定向,导致无法打印在屏幕上。而Err即便被重定向,也会被打印在屏幕上。
Chap 10 RTTI
1、装载类
Class.forName(类名);实现将类装载。注意这个类必须与异常ClassNotFoundException同时使用。
在装载类的同时,将初始化静态成员。而对象将只在需要的时候装载。
2、如何得到类名
设有类A,实例变量a = new A();
则可通过两种方式得到类名:A.class;a.getClass();得到的结果都是class A(注意前面多个class)。
对于primitive、数组、接口,都可以按同样的办法。
对于与primitive对应的wrap类,如short对应的Short,应用Short.TYPE可以得到”short”。
3、RTTI(动态类型检查)的方法
1)经典的类型转换:如(Shape)。
2)上面提到的class方法。
3)instanceof方法。
- Think in java 学习手记(三)
- Think in java 学习手记(一)
- Think in java 学习手记(二)
- 菜鸟学习think in java (三)
- Think in Java 学习
- 菜鸟学习think in java (一)
- 菜鸟学习 Think in java (二)
- think in java 学习笔记
- think in java 学习总结
- [think in java]知识点学习
- 《Think in Java》(三)——一切都是对象
- 《thinking in java》学习手记(四)
- Think in Java(三):访问权限控制
- 《Think in Java》学习笔记(停止整理)
- think in java 学习笔记(一)方法重载
- Think in Java学习总结(一)之对象
- think in java学习篇(一)
- Think in Java学习 菜鸟一枚
- 一个被大多数初级程序员忽略的安全问题 [严重]
- 小技巧:用javascript实现asp.net中ispostback功能!
- DataSet基础-建立包含多个表的数据集(dataset),并建立表间制约关系
- 浅谈一下我使用的开发小规模B/S应用的架构
- 重要知识:身份证复印件的正确使用方法
- Think in java 学习手记(三)
- ASP.net下的前台日历控件源代码(不刷新页面)Calendar .js
- 五一
- U盘上的迷你linux——BabyLinux
- 在你心中有这样的一个人吗?
- Intel笔试面试题目
- 联想ET980小屏应用及输入法的设计与开发
- 无耻的银联
- 网络推广能否为企业带来效益以及精彩回复