静态内部类与非静态内部类之间的访问
package cn.hncu.day3.inner;
public class Outer {
private int size;
public void aa(){
size++;
System.out.println(size);
}
public void bb(){
//共用this对象,不需要另外再new一个Outer对象去调用aa()
aa(); //相当于this.aa();
}
//非静态的内部类1---演示一个非静态内部类的基本用法
//可理解为外部类的一个成员,跟一个方法一样(包括传参)---对象级
public class Inner{
private int counter=10;
private int size=5;//内部类可以隐藏外部类的成员变量
public void doSth(){
size++;//可以访问外部类的成员变量,即使private的也可以---其实跟函数一样
System.out.println(size);
//外部类的size被隐藏了,如果一定要访问,那么可采用下面的方式
//this.size是内部类的, 而Outer.this.size是外部类的
System.out.println( Outer.this.size );
}
}
//非静态的内部类2----i.演示非静态兄弟内部类之间的访问方式---对象级
public class Inner2{
public void doSth(){
//不用外部类对象,因为共用this对象
Inner in = new Inner();//相当于 this.new Inner()
System.out.println( in.counter );//可以访问兄弟内部类中的私有成员
//iv.在非静态内部类中访问 静态兄弟内部类
Inner3 in3 = new Inner3();
in3.doSth();
}
class A{
private int a=5;
}
}
//静态内部类---跟静态方法的用法非常类似---类级
//iii.在静态内部类中访问非静态内部类
//private
public static class Inner3{
int num=10;
public void doSth(){
Outer out = new Outer();
Inner in = out.new Inner();
in.doSth();
}
public static void fun(){
System.out.println("aaaaaa");
}
}
//ii.在静态内部类中访问兄弟静态内部类
private static class Inner4{
int num=10;
public void doSth(){
Inner3 in = new Inner3();
in.doSth();
}
}
public static void main(String[] args) {
Outer out = new Outer();
out.aa();
//非静态内部类,要用“外部类的对象.new”的方式构造内部类对象
Inner in = out.new Inner();
in.doSth();
Inner2 in2 = out.new Inner2();
in2.doSth();
}
}
-----------------------------------------------------------------------
package cn.hncu.day3.inner;
public class Outer2 {
//对于其它类来说,要访问一个静态或非静态内部类,静态与非静态方法,规则是一样的
public void aa(){
//2访问另一个类中的静态内部类
Outer.Inner3.fun();//静态方法
Outer.Inner3 in = new Outer.Inner3();
in.doSth();
//3访问另一个类中的非静态内部类
Outer out = new Outer();
Outer.Inner in2 = out.new Inner();
in2.doSth();
}
public static void main(String[] args) {
//1 注意: 私有的内部类是不能被其它外部类访问的
//Outer.Inner4 in0 = new Outer.Inner4();//ERROR
//2访问另一个类中的静态内部类
Outer.Inner3.fun();//静态方法
Outer.Inner3 in = new Outer.Inner3();
in.doSth();
//3访问另一个类中的非静态内部类
Outer out = new Outer();
Outer.Inner in2 = out.new Inner();
in2.doSth();
}
}