/*
* 静态内部类
1,在静态内部类,不可以访问外部类非静态成员
2,在静态内部类中,可以创建静态方法
* */
public class StaticClass {
public static void main(String [] args){
MyOuterClass2.MyInnerClass in = new MyOuterClass2.MyInnerClass();
in.m();
}
}
class MyOuterClass2{
int i;
static int j;
static class MyInnerClass{
int a;
static int b;
static void f(){}
void m(){
//System.out.println(i);报错 不能访问非静态成员
System.out.println(j);
}
}
}
/*
局部内部类
声明在局部方法内部的类叫做局部内部类
1,在局部内部类里面可以访问 '外部类的成员'
2,在局部内部类中如果想访问'外部类的局部变量',此变量必须被声明成 final的
3,在局部内部类中不能创建静态的成员
4,局部内部类不能创建对象(看其作用域,在有些地方认可创建)
* */
public class LocalClass {
public static void main(String [] args){
new MyOuterClass();
}
}
class MyOuterClass{
private int value;
private static int staticValue;
public void fun(final int i){
int a=1;
final int b=1;
class InnerClass{
//static int c;报错 不能创建静态成员
//static void f(){}
void test(){
System.out.println(value);
System.out.println(staticValue);
System.out.println(i);
System.out.println(a);
System.out.println(b);
}
}
}
}
/*
成员内部类
1,成员内部类,可以访问外部所有成员
2,成员内部类,不可以创建静态方法 静态方法和属性只能声明在静态类或顶层类
*/
public class MemberClass {
public static void main(String [] args){
MyOuterClasss outerClass = new MyOuterClasss();
outerClass.m();
MyOuterClasss.MyInnnerClass inner = outerClass.new MyInnnerClass();
inner.f();
}
}
class MyOuterClasss{
private int i;
private static int j;
class MyInnnerClass{
int a;
//static int b;报错 不能有静态成员
//static void fun(){}
void f(){
System.out.println(i);
System.out.println(j);
System.out.println(a);
}
}
void m(){
MyInnnerClass c = new MyInnnerClass();
c.f();
}
}
/**
没有名字的类叫 匿名类
具备以下条件就可以声明成匿名内部类
1,该类继承某个类,或者实现某个接口
2,该类只创建一个对象*/
public class NoNameClass {
public static void main(String [] arsg){
JFrame jf = new JFrame("frame");
jf.addWindowListener(new WindowAdapter(){ 匿名内部类
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
super.windowActivated(e);
}
});
}
}