Java:内部类

内部类

    1. 内部类与其所在的外层类之间存在着逻辑上的依赖关系——内部类的对象不能单独存在,它必须依赖一个其外层类的对
象;
    2. 在内部类中可以直接访问其外层类中的成员、包括属性和方法,即使这些属性和方法是 private 的。
    3. 内部类可以声明为抽象类,因此可以被其它的内部类继承。
也可以声明为 final 的。

    4. 和外层类不同,内部类可以声明为 private 或 protected。

class A{
	private int s;
	public class B{
		public void mb() {
		s = 100;
		System.out.println("在内部类B中s="+s);
		}
	}
	public void ma() {
		B i = new B();
		i.mb();
	}
}

public class TestInner {
  public static void main(String[] args) {
	  A a = new A();
	  a.ma();//output:在内部类B中s=100
  }
}

在外部使用其他类中的内部类    

在外部使用其他类中的内部类虽然不提倡,但也是允许的。此时,应指明其完整层次,并显式建立对象间的依赖关系。

class AA {
    private int s;
    public class B {
    public void mb() {
      s=100;
      System.out.println(s);
    }
   }
 }
public class Test {
	public static void main(String[] args) {
	 AA a = new AA();
	 // 创建一个依赖于 a 而存在的 b
	 AA.B b = a.new B();
	 b.mb();//output:100
	 }
}

内部类中出现变量命名冲突时,可以使用内部类对象的特殊属性“< 外层类名 >.this”来访问其所依赖外层类对象的成员

class A3 {
 private int s = 111;
 public class B {
 private int s = 222;
 public void mb(int s) {
 System.out.println(s); // 局部变量 s
 System.out.println(this.s); // 内部类对象的属性 s
 System.out.println(A3.this.s); // 外层类对象属性 s
 }
 }
 }
 public class Test3 {
 public static void main(String args[]) {
 A3 a = new A3();
 A3.B b = a.new B();
 b.mb(333);//output:333\n222\n111\n
 }
 }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值