内部类的整合

点击上方蓝色文字,加关注,获取更多

哈喽今天为大家带来了一些内部类的干货,收下吧。

老套路,先答题,今天的题,后面有解析哈

59行是C c = new C()这句,小哥忘了标记了

19年去东南大学参加比赛,突然想发出来,留恋一下,也路过了南航

干货来了:成员内部类

  • (一)由内部类中访问外部类:
                1.若内部类中的属性名字和外部类中的属性名字相同,则优先打印内部类的属性
                2.若内部类中的属性名字和外部类中的属性名字不同,若打印外部类属性名则是外部类的属性,打印内部类的属性名称,则为内部类属性名称。
                总之:从内部类中访问外部类的属性,外部类类名.this.外部类属性名,从内部类中访问外部类的属性,this.内部类属性名。

class A{
  int outAge=31;
  int age=21;
  
  class B{
    int age=20;
    int innerAge=30;
    public void testB() {
      System.out.println("这是外部类的outAge"+outAge);
      System.out.println("这是外部类的age"+A.this.age);
      System.out.println("这是内部类的innerAge"+this.age);
      System.out.println("这是内部类的age"+age);
    }
}
主方法:
  A a = new A();
  A.B b=a.new B();
  b.testB();

对于成员内部类的等价形式:代码如下:实际上就是继承

class A{
  int age=20;
}
class B extends A{
  A a;
  void setA(A a) {
    this.a=a;
  }
  public void test() {
    System.out.println(this.age);
  }
}
主方法:
  A a = new B();
  B b = new B();
  b.setA(a);
  b.test();
  • (二):静态内部类

class A{
  int outAge=31;
  int age=21;
  static class B{
    int age=20;
    static int innerAge=30;
    public void testB() {
      System.out.println(innerAge);
      System.out.println(age);
    }
  }
}
主方法:
A.B b = new A.B();

讲解:

    1.不管成员内部类还是静态内部类,都不能直接在外部类中去访问内部类中的属性
       2.内部类和外部类只有单向关系,没有双向关系
       3.在静态内部类中,只可以直接访问外部类的类成员
       4.只要是内部类,编译都会生成两个.class 文件
       5.主方法中不需要外部类的实例。

  • (三)匿名内部类:

class A{
  int a=0;
  void testA(){
    //此处经历了向上转型
    C c = new C(){
      int d=30;
      void testD(){
        System.out.println("D------");
      }
    };
  }
}
class C{
  int c=20;
}

以上代码的等价形式为:

class A{
  int a=0;
  void test(){
    C c = new C1();
  }
  class C1 extends C{
    int d=30;
    void testD(){
      System.out.println("==============");
    }
  }
}
class C{
  int c=20;
}
  1. 伴随着向上转型的过程

  2. 细分为:匿名成员内部类和匿名静态内部类

  3. 匿名成员内部类具有成员内部类的所有特点

  4. 匿名静态内部类具有静态内部类的所有特点

小编今天有花了一下午时间更深入的总结了一下内部类,真的是花了好长好长好长时间,又是一个不眠之夜啊,下面来听一下今天的解析吧


‍兄弟们,动一动小手,右下方点赞点在看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值