内部类、内部接口

/**/非静态内部类的使用示例(展示内部类与外部类,内部类与内部类之间的访问形式)**
public class Outer { //一个文件中只能有一个public的一级类,但它内部的类还是可以public的。
private int size;
public class Inner{ //可理解为外部类的一个成员,跟一个方法一样。 (对象级)
private int counter=10;
//private int size;
public void doStuff(){
size++;  //外部类传给内部类的形参,如果内部类中没有定义size,则访问的是外部类的size
//this.size++; //内部类中的变量size,若内部类中没有定义,则语法错误
//Outer.size;  //这种方式的访问是错误的
Outer.this.size++;//外部类的size
}
}
public class Inner2{      // (对象级,同是非静态兄弟内部类之间的访问方式)
public void doStuff(){
Inner t = new Inner();////第二个内部类中,调用第一个内部类。(就象直接方向一样,直接调用。)
System.out.println(t.counter);
}
}
public static class Inner3{ //静态类跟静态方法的用法类似 (类级,在静态内部类中访问非静态兄弟内部类)
int num=5;
public void doStuff(){
//Inner tt = new Inner(); //错。原因跟类中的方法一样,静态成员方法无法直接访问非静态成员
Outer outer = new Outer();
Inner inner = outer.new Inner(); 
System.out.println(inner.counter);
}
}

public static void main(String[] args) {
Outer outer = new Outer();
Inner inner = outer.new Inner();  //必须通过外部类对象.new 来构造内部类对象
inner.doStuff();
System.out.println(outer.size);
//System.out.println(counter);//编译错误,外部类不能直接访问内部类的private变量
System.out.println(inner.counter);//但通过内部类对象可以,就象通过类的方法访问其私有成员变量一样
//System.out.println(inner.size);

Inner2 inner2 = outer.new Inner2();
inner2.doStuff();
}
}

class TT{
public static void main(String[] args) {
Outer out = new Outer();
Outer.Inner outerInner = out.new Inner();
//Outer.Inner outerInner = new Outer.Inner(); //错
//Outer.Inner outerInner = Outer.new Outer.Inner(); //错
//Outer.Inner outerInner = Outer.new Inner(); //错
outerInner.doStuff();
}
}

--------------------------------------------------------
//静态内部类的使用示例(展示如何在一个类中访问另一个类中的静态内部类)
class Outer2 {
private static int size;
static class Inner{ //可理解为外部类的一个成员,跟一个方法一样。
public void doStuff(){
size++;
System.out.println("size="+size);
}
}
}
class TestOuter2{
public static void main(String[] args) {
Outer2.Inner inner = new Outer2.Inner();
inner.doStuff();
}
}

猜你喜欢

转载自blog.csdn.net/qq_38431927/article/details/77864287