/**/非静态内部类的使用示例(展示内部类与外部类,内部类与内部类之间的访问形式)**
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
今日推荐
周排行