里面的可以自由访问外面的,访问非静态成员变量时必须先创建对象。
以下从内部类的状态开始阐述。
1)非静态内部类的非静态方法
直接访问
public class Outter {
int i = 5;
static String word = "Hello";
class Inner {
void Test() {
System.out.println(i);
System.out.println(word);
}
}
}
2)非静态内部类的静态方法
非静态内部类不能有静态方法,编译报错。
3)静态内部类的非静态方法
访问非静态成员变量必须先new外部类。
public class Outter {
int i = 5;
static String word = "Hello";
static class Inner {
void Test() {
System.out.println(new Outter().i);
System.out.println(word);
}
}
}
4)静态内部类的静态方法
和第三种情况类似,静态方法访问外部类非静态成员变量必须先new外部类。
public class Outter {
int i = 5;
static String word = "Hello";
static class Inner {
static void Test() {
System.out.println(new Outter().i);
System.out.println(word);
}
}
}
可以将内部类理解为外部类的一个普通成员,所以外面的访问里面的需先new一个对象。
Outter.Inner inner = new Outter.Inner();
1)非静态方法访问非静态内部类成员
先new内部类
public class Outter {
void Test() {
System.out.println(new Inner().i);
}
class Inner {
int i = 5;
// static String word = "hello"; 编译报错!
}
}
2)非静态方法访问静态内部类的成员
先new内部类,再访问非静态的成员变量
静态成员变量可外部类.内部类.变量名直接访问
public class Outter {
void Test() {
Outter.Inner inner = new Outter.Inner();
System.out.println(inner.i);
System.out.println(inner.string);
System.out.println(Outter.Inner.string);
}
static class Inner {
int i = 5;
static String string = "Hello";
}
}
3)静态方法访问非静态内部类的成员
public class Outter {
static void Test() {
System.out.println(new Outter().new Inner().i);
}
class Inner {
int i = 5;
// static String word = "Hello"; 编译报错!
}
}
4)静态方法访问静态内部类的成员
访问非静态成员需先new 内部类
new Inner().i
与第2种情况相似
public class Outter {
static void Test() {
Outter.Inner inner = new Outter.Inner();
System.out.println(new Inner().i);
System.out.println(inner.i);
System.out.println(Outter.Inner.word);
}
static class Inner {
int i = 5;
static String word = "Hello";
}
}
5)匿名内部类
匿名内部类访问外部成员变量时,成员变量前应加final关键字。
以上就是动力节点在线的视频课程中介绍的Java内部类和Java外部类的相互访问的几种方式,各自的访问方式有所不同,也有相同之处,想深入学习的小伙伴可以继续观看动力节点在线的免费视频课程。
提枪策马乘胜追击04-21 20:01
代码小兵87207-15 12:10
杨晶珍05-11 14:54
杨晶珍05-12 17:30