内部类

来源:互联网 发布:香港旅游 知乎 编辑:程序博客网 时间:2024/06/05 16:45
/**
* 内部类:在一个类中使用内部类,可以在内部类中直接存取其所在类的私有成员变量;(但是内部类的成员只能自己用,不让外部类用)
* 内部类的实例一定要绑在外部类的实例上, 如果从外部类中初始化一个内部类对象,那么内部类对象就会绑定在外部类的对象上
* 最典型的情况:外部类有一个方法,该方法返回一个指向内部类的引用,就像底下的doit()方法,如果没有这个方法,那就只能
* 这个样子OuterClass.innerClass in2=out.new innerClass()创建内部类对象
* 如果想在内部类创建外部类的对象可以再内部类中声明这样一个方法 public 外部类 方法名(){ return 外部类.this}
* 基类:就是父类
* 向上转型:子类转换成父类 ,即用父类对象创建子类对象
* 创建一个接口,然后创建一个类,内部类实现这个接口,在这个类中,在这个类中创建一个用该接口定义的方法,返回一个内部类的对象
* 内部类可以用于实现其他类的接口
* 1:成员内部类:在类中定义的类
* 2:局部内部类:在类的方法或任意的作用域中定义的
* 也可以在方法内部实现一个接口,一般这个方法都是用接口定义的,返回一个该接口的实现类,该接口的实现类其实是实现了
* 接口里面的方法
* 3:匿名内部类:没有名称的内部类
* 如果是局部内部类就在该方法(一般是接口定义,返回一个接口的实现)内创建一个局部内部类,
* 但是匿名内部类不需要创建内部类,只是return new 接口(){实现该接口的方法}
* 如果匿名内部类希望它使用一个在其外部定义的对象,那么这个参数引用是final的
* 4:静态内部类;如果不需要内部类对象与外围类对象之间有关系,那么可以将内部类声明为static,
* 在创建内部类对象时不需要外部类的对象;在内部类中不能访问非静态的外围类对象
* 不能使用this对象
* 静态内部类可以放到接口中,任何放在接口的类都是public和static的,甚至可以在内部类中实现该接口
*/
innerClass in =new innerClass(); //在外部类实例化内部类对象引用
public void out(){ //在外部类方法中调用内部类方法
in.inf();
}
//内部类开始 
class innerClass{
innerClass(){ //内部类的构造方法

}
int y=0;  //内部类成员变量
public void inf(){ //内部类的成员方法
}

}//内部类结束

public innerClass doit(){ //外部类方法,返回值为内部类的引用
//y=4; 外部类不可以直接访问内部类的成员变量
in.y=4;
return new innerClass();//返回内部类的引用
}
public static void main(String[] args) {
OuterClass out= new OuterClass();
//内部类的对象实例化操作必须在外部类或外部类的非静态方法中实现
OuterClass.innerClass in=out.doit();
OuterClass.innerClass in2=out.new innerClass();//实例化内部类对象
}
原创粉丝点击