非静态内部类不能有静态成员,静态内部类可以有静态成员和非静态成员
public class Demo{
class A {
public int a;
// static int b; 非静态内部类不能有静态成员
void a() { }
// static void b(){ } 非静态内部类不能有静态成员
}
static class B {
public int a;
static int b;
void a() { }
static void b(){ }
}
}
静态内部类的静态成员可以访问外部类的静态变量,不能访问外部类的非静态成员
public class Demo{
int c;
static int d;
void e(){}
// static d(){}
static class B {
void a() {
// System.out.println(c); 静态内部类的静态成员不可以访问外部类的静态变量
System.out.println(d);静态内部类的静态成员可以访问外部类的静态变量
// e();静态内部类的静态成员不可以访问外部类的方法
}
}
}
静态内部类的非静态成员可以访问外部类的静态变量和非静态成员
public class Demo{
int c;
static int d;
void e(){}
// static d(){}
class B {
void a() {
System.out.println(c);
System.out.println(d);
e();
}
}
}
外部类访问非静态内部类的成员
public class Demo{
int c;
static int d;
void e(){}
// static d(){}
class B {
int a;
// static int b;
void a() {
}
}
public static void main(String[] args) {
Demo D=new Demo();
B b=D.new B();
int num;
num=b.a;
b.a();
}
}
外部类访问静态内部类的成员
class F{
static class B {
int a;
static int b;
void a() {
}
}
}
public class Demo{
public static void main(String[] args) {
//访问静态成员
int num=F.B.b;
F.B.b();
//访问非静态成员
F.B fb=new F.B();
num=fb.a;
fb.a();
}
}