静态内部类与非静态内部类之间的访问

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();

}

}

转载于:https://www.cnblogs.com/1314wamm/p/5600210.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值