JAVA基础

Java内部类以及使用场景

2022-05-19  本文已影响0人  在岁月中远行

内部类:定义在另一个类中的类,它体现了一种代码的隐藏机制和访问控制机制。当往往只有外部类调用此类时,所以就没必要专门设置一个JAVA文件存放这个类。

分为 成员内部类,局部内部类,静态内部类,匿名内部类。

package com.example.aaaa;

import android.util.Log;

public class Outer {

public int num;

    //成员内部类

    private class Inner{

private Stringname;

    }

public void fun(){

class Inner2{//局部内部类

            private int num =2;

        }

Inner2 inner2 =new Inner2();

        System.out.println(inner2.num);

    }

static class Inner3 {//静态内部类不持有外部类引用

        public void getMethod () {

}

}

public static void main() {

Outer inner4 =new Outer() {//匿名内部类

            public void func () {

System.out.println("2");

            }

};

        Outer outer =new Outer();

        Inner inner = outer.new Inner();

        Log.d("tanlin", inner.name);

    }

}

2 Java 提供的两种方法让我们实现多重继承:接口和内部类

内部类可以继承一个与外部无关的类,从而保证内部类的独立性,正是这一点,多重继承才得以实现。

从实现代码和输出结果可以发现,儿子继承父类,变得比父亲更加强壮;同时也继承了母类,只不过友好指数下降。

为什么内部类会持有外部引用。而静态内部类不会呢

public class MyClass {

    private static class MyInnerClass {

        private String innerString;

        public MyInnerClass( ) {

        }

        public MyInnerClass(String innerString ) {

            this.innerString = innerString;

        }

    }

}

生成字节码文件.class文件

classMyClass$MyInnerClass

{

private String innerString;

public MyClass$MyInnerClass() {}

public MyClass$MyInnerClass(String paramString)

  {

  this.innerString = paramString;

  }

}

而如果是静态内部类:

class MyClass$MyInnerClass

{

  private String innerString;

  public MyClass$MyInnerClass(MyClass paramMyClass) {}

  public MyClass$MyInnerClass(MyClass paramMyClass, String paramString)

  {

    this.innerString = paramString;

  }

}

结论:如上,默认为内部类加上了外部类的引用

上一篇 下一篇

猜你喜欢

热点阅读