java 内部类
来源:互联网 发布:为知笔记产品经理 招聘 编辑:程序博客网 时间:2024/04/26 12:15
1.内部类拥有外围类的所有元素的访问权
package aaaa;
interface Selector{
boolean end();
Object current();
void next();
}
public class Sequence {
private Object[] items;
private int next = 0;
public Sequence(int size){
items = new Object[size];
}
public void add(Object obj){
if(next<items.length)
items[next++] = obj;
}
public class SequnceSelector implements Selector{
int i=0;
@Override
public boolean end() {
return i == items.length;
}
@Override
public Object current() {
return items[i];
}
@Override
public void next() {
if(i<items.length)
i++;
}
}
public Selector selector(){
return new SequnceSelector();
}
public static void main(String[] args) {
Sequence ss = new Sequence(10);
for(int i=0;i<10;i++){
ss.add(i);
}
Selector selector = ss.selector();
while(!selector.end()){
System.out.print(selector.current());
selector.next();
}
}
}
结果:0123456789
2.想要创建内部类的对象,只能使用外部类对象创建,不能直接new
//Selector selector = ss.selector();
Selector selector = ss.new SequnceSelector();
上面代码中selector为内部类的对象,ss为外部类对象。
内部类、接口的实例化方法详见 http://blog.sina.com.cn/s/blog_ac843e3301015nsb.html
3.局部内部类建立在一个方法中或者某个域中,不能有访问说明符
4.匿名类
如果定义了匿名类,并且希望他使用一个在其外部定义的对象,那么这个参数的引用是final的,
可以利用实现抽象类的方法创建匿名类,这样可以自己定义构造方法,但构造方法中需要的参数不一定是final的,因为此参数不一定会用到
5.匿名类可以扩展类、实现类,只能实现一个接口
6.闭包&回调
我的理解:闭包:内部类对象可以控制所有外部元素。回调:外部类对象获得内部类对象,只能调用外部public的方法。
7.继承内部类
class WithInner {
class Inner{}
}
public class InheritInner extends WithInner.Inner{
//不能用默认的构造方法,因为想要创建内部类对象,需要外部类对象
InheritInner(WithInner wi){
wi.super();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
WithInner wi = new WithInner();
InheritInner ii = new InheritInner(wi);
}
}
8."覆盖"内部类
把内部类看成是外部类的一个方法,如果继承了外部类之后“重写内部类”,并没有什么卵用。代码如下
class Egg{
private Yolk y;
protected class Yolk{
public Yolk() {System.out.println("Egg.Yolk 构造方法");}
}
public Egg(){
System.out.println("New Egg()");
y=new Yolk();
}
}
public class BigEgg extends Egg{
public class Yolk{
public Yolk() {System.out.println("BigEgg.Yolk 构造方法");}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
BigEgg bigegg = new BigEgg();
bigegg.new Yolk();
}
}
输出:
New Egg()
Egg.Yolk 构造方法
BigEgg.Yolk 构造方法
- 【Java】【内部类】Java 内部类简介
- [Java] Java 内部类
- Java 内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、局部内部类、静态内部类、匿名内部类)
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- java的内部类、匿名内部类、局部内部类
- java内部类之成员内部类、静态内部类
- java 成员内部类 局部内部类,匿名内部类
- Java 静态内部类/内部类
- java内部类、静态内部类 小结
- Java内部类,静态内部类
- JAVA 内部类与静态内部类
- java内部类--局部内部类
- Java 内部类以及匿名内部类
- 顺序环形缓冲区的设计和实现
- 范型编程与STL--第二章iterator(迭代器)解析
- JAVA依托axis2实现计划任务
- Javascript 验证Validator.js 使用全解(转载)
- Ryan dahl对node.js初衷
- java 内部类
- 第三个程序:继承
- linux 安装mysql文件
- 【git-svn】从SVN到git 的转换
- 转发与重定向
- 学生信息管理设计
- Differences between UDID and UUID
- C++第八章
- Java:String和Date、Timestamp之间的转换