10-Java内部クラス-メンバー内部クラス、ローカル内部クラス、匿名内部クラス


1.インナークラス

他のクラス内にクラスを定義します。このクラスは内部クラスと呼ばれます。

  • 内部クラスにより、定義位置が異なり、メンバー内部クラスとローカル内部クラスに分けられます。
    • メンバー内部クラス:内部クラスは外部クラスのメンバー位置にあります
    • ローカル内部クラス:内部クラスは外部クラスのメンバーメソッドにあります

例えば:

class A{
    
    
   //成员内部类:位于外部类的成员位置
   class B{
    
    

   }
    public void show(){
    
    
      //局部内部类,位于外部类成员方法内
       class C{
    
    

        }
    }
}

1.メンバー内部クラス

  • メンバー内部クラスのアクセス特性

    • 内部クラスは、プライベートクラスを含む外部クラスのメンバーに直接アクセスできます。

    • 内部クラスのメンバーにアクセスするには、外部クラスが内部クラスオブジェクトを作成する必要があります

    • 内部クラスオブジェクトを直接外部で作成でき、フォーマット

外部クラス名。内部クラス名オブジェクト名=新しい外部クラス()。新しい内部クラス()

  • 注意

    • クラスを民営化することはできませんが、内部クラスは民営化できます(多くの場合、内部クラスの民営化、データセキュリティを確保するための外部間接アクセスの形式が使用されます)

    • 内部クラスは、静的内部クラスと呼ばれる静的で変更できます。静的内部クラスは、外部クラスの静的メンバーにのみアクセスできます(データに簡単にアクセスするため)。

    • 外界によって直接作成された静的内部クラスの形式

Wai.Nei a =新しいWai.Nei();

例えば:

public class 内部类的访问特点 {
    
    
    public static void main(String[] args) {
    
    
        //可以在外部直接创内部类的对象
        Outer.Inner inner1=new Outer().new Inner();
        inner1.neishow();
        Outer outer=new Outer();
        outer.waishow();

    }

}
class Outer{
    
    
    int num=100;
    private int a=200;
    class Inner{
    
    
        int b=300;
        public void neishow(){
    
    
            System.out.println(b);
            //内部类可以发访问外部类的成员,包括私有成员
            System.out.println(num);
            System.out.println(a);
            waishow1();
        }
        public void neitest(){
    
    
            System.out.println("内部类方法执行");
        }
    }
    public void waishow(){
    
    
        System.out.println("外部的show方法执行");
        //外部类访问内部类的成员,必须创建内部类的对象
        Inner inner=new Inner();
        //通过内部类对象,访问内部类的成员变量
        System.out.println(inner.b);
        //通过内部类对象,访问内部类的成员方法
        inner.neitest();
    }
    private void waishow1(){
    
    
        System.out.println("外部类私有方法执行");
    }
}

2.ローカル内部クラス

  • ローカル内部クラスのアクセス特性
    • 外部クラスのメンバーに直接アクセスできます
    • 内部クラスオブジェクトを作成し、オブジェクトを介して内部クラスメソッドを呼び出して、内部クラス関数を使用できます。
    • ローカル変数へのローカル内部クラスアクセスは最終変更である必要があります

例えば:

public class 局部内部类 {
    
    
    public static void main(String[] args) {
    
    
        int a=100;
        int b=200;
        Outer outer=new Outer();
        outer.waishow(100,200);

    }
}
class Outer{
    
    
    private int num=20;

    public void waishow(final int a,final int b){
    
    
        //该局部变量需要使用final修饰
        final int num1=30;
        //局部内部类定义在成员方法内
        class inner{
    
    
            public void neishow(){
    
    
                num=40;
                System.out.println(num);
                System.out.println(num1);
                System.out.println(a+":"+b);
            }
        }
        //创建内部类对象,调用内部类功能
        inner x = new inner();
        x.neishow();
    }
}

3.匿名の内部クラス

これは、ローカル内部クラスを記述する簡単な方法です。

  • 前提条件:クラス(抽象クラ​​スの場合もあります)またはインターフェースがあります。形式:

    新しいクラス名またはインターフェース名(){ 書き換えメソッド; };

  • 自然:このクラスまたはこのインターフェイスを実装するサブクラスを継承する匿名オブジェクト

例えば:

//抽象类
abstract class AbstractClass{
    
    
    public abstract void show();
}
class Outer1{
    
    
    public void method(){
    
    
        //创建抽象类的子类的匿名对象
        new AbstractClass(){
    
    
            @Override
            public void show() {
    
    
                System.out.println("shoshowshow");
            }
        };
    }
}
//接口
public interface MyInter{
    
    
    public abstract void show();
}
class Outer{
    
    
    public void method(){
    
    
        new MyInter(){
    
    
            @Override
            public void show() {
    
    
                System.out.println("showshowshow");
            }
        };

    }
}

おすすめ

転載: blog.csdn.net/m0_46988935/article/details/110559846
おすすめ