package e4_22;
public class ClassOuter {
private int x = 10;
private static int y = 20;
public class Inner1{
private int x1 = 100;
private int y1 = 200;
//private static int z = 0;//不能在实例内部类中定义静态变量。
static final int c = 300;//在实例内部类中允许定义常量。
public Inner1(){
x1 = 101;
y1 = 201;
System.out.println(ClassOuter.this.x);//通过外部类名.this.成员变量的方式访问访问外部类的变量。
//System.out.println(ClassOuter.this.y);
System.out.println(ClassOuter.y);
System.out.println("public class Inner1的反射是:"+this);
}
void show(){
System.out.println(x1);//直接访问实例成员类的实例成员变量。
System.out.println(y1);
}
}
protected class Inner2{
public void Innner2M1(){
System.out.println("protect class Inner2 的方法是:"+this);
}
//public static void Inner2M2(){};//不能在实例成员类中定义静态方法。
}
class Inner3{
public Inner3(){
System.out.println("默认class inner3的反射是:"+this);
}
public class Inner4{
public Inner4(){
System.out.println("默认class inner4的反射是:"+this);
System.out.println("Inner3_Inner4的反射是:"+Inner3.this);
System.out.println("class inner3 的反射是:"+ClassOuter.this);
}
}
}
private class Inner5{
public Inner5(){
System.out.println("private class Inner5的反射:"+this);
}
}
interface Inner6{
public abstract void m1();
void m2();//接口中的方法默认的都是共有抽象方法;
}
class Inner7 implements Inner6{
@Override
public void m1() {
// TODO Auto-generated method stub
System.out.println("class Inner7的抽象方法是:"+this);
}
@Override
public void m2() {
// TODO Auto-generated method stub
}
}
public static void staticMethod(){
//Inner1 i1 = new Inner1();//外部类的静态方法不能直接引用实例成员类。
//外部类的静态方法不能访问实例变量,只能访问静态变量。
//x = 11;
y = 21;
}
public void instanceMethod(){
Inner1 i1 = new Inner1();
Inner5 i5 = new Inner5();
x = 12;
y = 22;
System.out.println("外部类:"+this);
}
public void showXY(){
System.out.println("x = "+x);
System.out.println("y = "+y);
}
}
package e4_22;
public class InstanceClassDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ClassOuter co1 = new ClassOuter();
ClassOuter.staticMethod();//用类调用类方法。
co1.instanceMethod();//用实力调用实例方法。
co1.showXY();
//格式一:外部类实例.new 内部类构造方法。
ClassOuter.Inner1 ci1 = co1.new Inner1();
ci1.show();
new InstanceClassDemo();
}
public InstanceClassDemo(){
ClassOuter co2 = new ClassOuter();
ClassOuter.Inner2 ci2 = co2.new Inner2();
ClassOuter.Inner3 ci3 = new ClassOuter().new Inner3();
ClassOuter.Inner3.Inner4 cii4 = ci3.new Inner4();
ClassOuter.Inner7 ci7 = co2.new Inner7();
ci7.m1();
ci7.m2();
}
}