内部类
内部类
内部类就是在写在其它类中的类。代码演示
使用已知变量在屏幕上输出,30、20、10(成员内部类)
Outer类
class Outer {
public int num = 10;
private String s="我是外部类的私有成员";
//内部类inner
class Inner {
public int num = 20;
public void show() {
int num = 30;
System.out.println(num);//输出的是30,因为就近原则
/* 输出的是20,因为this是对当前类的引用,
当前的类就是inner(show方法在inner里,输出的位置在show方法里,
对于show方法来说,直接包含的它的类,也就是当前类是inner),
也就是在成员变量和局部变量名字相同的情况下,
用this来区别成员变量的局部变量 */
System.out.println(this.num);
/*输出的是10,因为这个num是外部类Outer的通过Outer来调用,
又因为是这个num与inner类(成员内部类)中的的变量名字相同,
因此用this来调用,表示当前类(Outer类)引用*/
System.out.println(Outer.this.num);
//内部类可以直接访问外部类的成员(包括私有成员),
//但外部类不能访问内部类私有成员
System.out.println(s);
}
}
}
InnerClassTes测试类
class InnerClassTest {
public static void main(String[] args) {
//外部类访问内部类的实例化格式
Outer.Inner oi = new Outer().new Inner();
oi.show();
}
}
结果
30
20
10
我是外部类的私有成员
局部内部类
Outer类
class Outer {
// 成员变量
private int a = 35 ;
// 成员方法
public void show() {
// 定义一个局部变量
final int b = 45 ;//JDK1.7之前要加final不然报错 但是在JDK1.8 不用加 不会报错
// 局部内部类
class Inner {
public void method(){
System.out.println(a) ;
System.out.println(b) ;
}
}
/* 创建对象,等到外部类调用show方法时就调用
到这个对象(Inner)及对象的调用方法,这样就可以间接访问内部类了*/
Inner i = new Inner() ;
// 调用放
i.method() ;
}
}
InnerText类
class InnerText {
public static void main(String[] args) {
// 创建Outer的对象
Outer out = new Outer() ;
// 调用show方法,通过对象调用方法来间接访问内部类
out.show() ;
}
}
结果
35
45
静态内部类
Outer类
class Outer {
// 成员变量
private static String a = "我是静态成员变量" ;
// 静态内部类
static class Inner {
public void method(){
System.out.println(a) ;//这里的a如果是不是静态的就不能访问,静态只能访问静态,非静态既能访问静态也可以访问非静态
}
}
}
InnerText类
class InnerText {
public static void main(String[] args) {
// 创建Outer的对象,外部类访问静态内部类的方式
Outer.Inner out = new Outer.Inner();
// 调用show方法
out.method();
}
}
结果
我是静态成员变量