各种类的区别
内部类
一个类中定义一个类
访问特点:
内部类可以访问外部的成员
外部类访问内部必须实例化
public class 类名{
修饰符 calss 类名{
}
}
成员内部类
内部类分类:
- 成员内部类(类的成员位置);
- 局部内部类(类的局部位置)
如何访问成员内部类
外部类名.内部类名 对象名=外部类对象.内部类对象;
outer.Inner oi=new outer().new Inner();
实际上可以将内部类修饰符改为private,然后再定义一个函数
调用成员内部类以避免上面的这种定义方法
public class outer {
private int num=10;
public class Inner{
public void show() {
System.out.println(num);
}
}
public void method() {
Inner in=new Inner();
in.show();
}
}
局部内部类
和前面的形成对比,可以在局部方法的内部定义类并实例化对象进行操作
public class outer {
private int num=10;
/*
* public class Inner{ public void show() { System.out.println(num); } }
*/
public void method() {
class Inner{
public void show() {
System.out.println(num);
}
}
Inner i=new Inner();
i.show();
}
}
匿名内部类–局部内部类的特殊一种形式
前提:存在一个类或者接口,这里的类可以是具体类也可以是抽象类
格式:
new 类名或者接口名(){
重写方法;
}
例子:
new Inter{
public void show();
};
- 本质:是一个继承了该类或该接口内部类
- 调用方法:直接在分号前调用该方法
public class outer {
public void method() {
/*
* new Inter() { public void show() { System.out.println("成功输出!"); } };
*/
new Inter() { //已经定义了一个接口
public void show() {
System.out.println("成功输出!");
}
}.show();
}
}
// 多次调用
public void method() {
/*
* new Inter() { public void show() { System.out.println("成功输出!"); } };
*/
/*
* new Inter() { public void show() { System.out.println("成功输出!"); } }.show();
*/
Inter i= new Inter() {
public void show() {
System.out.println("成功输出!");
}
};
i.show();
i.show();
}