内部类

测试代码:
public class Inner_Classes { private int p1 = 1; private static int ps1 = 11; protected int p2 = 2; public int p3 = 3; int i = 6; private void funPR_pc() {System.out.println("Inner_Classes...fun_pc()");} public void funPU_pc() {System.out.println("Inner_Classes...fun_pc()");} //外部类要访问内部类数据,必须先实例化内部类对象通过对象访问,访问不受访问修饰符修饰影响 int readInnerData1 = new ClassIn_PClass().c1; int readInnerData2 = new ClassIn_PClass().c2; int readInnerData3 = new ClassIn_PClass().c3; //成员内部类 [private访问权限、protected访问权限、public访问权限] /* * private,只能在外部类的内部访问 * public,任何地方都能访问 * protected,只能在同一个包下或者继承外部类的情况下访问 * 默认访问权限,只能在同一个包下访问 * * */ private class ClassIn_PClass{ private int c1 = 10; // private static int cs1 = 10; //非静态内部类中不能定义静态成员变量 protected int c2 = 20; public int c3 = 30; int i = 66; //遮蔽了外部类中的成员变量i //访问外部类数据: 外部类.this.成员变量 / 外部类.this.成员方法 public void value() {Inner_Classes.this.funPR_pc(); System.out.println(Inner_Classes.this.p1+i);} //内部类中可以调用外部类中所有成员变量和方法 public void test() {System.out.println("P: "+p1+ps1+p2+p3+"---"+"C: "+c1+c2+c3+" -> "); funPR_pc();} } public void fun() { //局部变量不能被访问修饰符修饰 // private int f1 = 10; int i; //局部内部类,访问仅限于方法内或者该作用域内,同样也不能被访问修饰符修饰 class ClassIn_Fun_PClass{ private int f1 = 10; // private static int cs1 = 10; //非静态类中不能定义静态成员变量 protected int f2 = 20; public int f3 = 30; public int value() { return f1; } public void test() {System.out.println(p1+ps1+p2+p3);} } } //静态内部类 //静态内部类不需要依赖于外部类,类似于静态成员属性,不能使用外部类的非static成员变量或者方法 static class ClassIn_SPClass{ } //匿名内部类时没有构造器的类,使用范围有限,大部分匿名内部类用于接口回调 //匿名内部类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的实现或是重写 Object inner = new Object() { private int a1 = 100; int a2 = 200; public void fun() {System.out.println("new Object(){}...fun");}; }; public static void main(String[] args) { Inner_Classes inner_Classes = new Inner_Classes(); //new ClassIn_PClass(); inner_Classes.new ClassIn_PClass().test();//不能直接创建内部类,需要通过外部类间接创建 //inner_Classes.inner.fun(); } } class InnerClassesTest{ public static void main(String[] args) { Inner_Classes inner_Classes = new Inner_Classes(); //如果ClassIn_PClass为private的,则不能访问。只能在它的外部类中访问 //inner_Classes.new ClassIn_PClass().test();//不能直接创建内部类,需要通过外部类间接创建 } }

浙公网安备 33010602011771号