>Java >Java시작하기 >Java 내부 클래스에 대한 자세한 설명

Java 내부 클래스에 대한 자세한 설명

王林
王林앞으로
2020-04-23 16:25:402509검색

Java 내부 클래스에 대한 자세한 설명

일반 내부 클래스

일반 내부 클래스에서 마스터해야 할 두 가지 주요 사항이 있습니다.

부모 클래스에 대한 참조를 보유하므로 어떤 액세스로든 부모 클래스의 변수 및 메서드에 액세스할 수 있습니다. right

내부 클래스는 상위 클래스 외부에 있음 생성 메소드

public class Main{
    public static void main(String args[]){
        Outer outer = new Outer();
        //外部类外部创建内部类
        Outer.Inner inner = outer.new Inner();
        inner.method();
    }
}
class Outer{
    private String value = "OuterValue";
    class Inner{
        public void method(){
            //持有父类引用,可以访问父类private变量value
            System.out.println(value);
        }
        //利用.this关键字,可以返回父类对象引用
        public Outer outerObject(){
            return Outer.this;
        }
    }
}

(권장 튜토리얼: java 입문 프로그램)

메서드 내부 클래스

메서드에 직접 정의된 내부 클래스

와 동일한 권한을 누릴 수 있습니다. 외부 클래스의 다른 메서드와 멤버 변수에 액세스할 수 있습니다.

메소드 1.8 이후에는 매개변수를 final로 설정할 필요가 없습니다.

메서드의 로컬 변수와 동일한 권한을 가지며, 앞에 정의된 로컬 변수에 액세스할 수 있습니다

메서드 범위 내에서 메소드의 내부 클래스에만 접근할 수 있습니다.

public class Main{
    public static void main(String args[]){
        Outer outer = new Outer();
        outer.outerMethod("param");
    }
}
class Outer{
    public void outerMethod(String value){
        class Inner {
            public void innerMethod(){
                //可以访问方法参数
                //1.8以后,内部类访问的方法参数不必设置为final
                System.out.println(value);
            }
        }
        new Inner().innerMethod();
    }
}

익명 내부 클래스

익명 내부 클래스는 실제로 우리가 자주 사용하는 핵심이자 지식 포인트입니다.

예를 들어, 새 스레드를 생성합니다

public class Main{
    public static void main(String args[]){
        Thread a = new Thread(new Runnable(){
            @Override
            public void run(){
                System.out.println("thread a is running;");
            }
        });
        a.start();
    }
}

위 코드는 Runnable 인터페이스를 구현하는 익명 클래스 객체를 생성한다는 의미이며, 이는 작성 편의성 때문에 두 번째 유형을 자주 사용합니다

.
public class Main{
    public static void main(String args[]){
        Thread a = new Thread(new RunnableImp());
        a.start();
    }
    static class RunnableImp implements Runnable{
        @Override
        public void run(){
            System.out.println("thread a is running;");
        }
    }
}

정적 내부 클래스

다음 두 가지 사항을 기억하세요

정적 내부 클래스 객체를 생성하려면 외부 클래스의 객체가 필요하지 않습니다(일반 내부 클래스에 필요)

비정적 외부 클래스에 접근할 수 없습니다 정적 내부 클래스의 클래스 메서드 또는 멤버 변수

public class Main{
    Outer.Inner inner = new Outer.Inner();
}

class Outer{
    private String ordValue;
    private static String staValue;
    static class Inner{
        {
            System.out.println(staValue);

            //这句编译通不过
            //System.out.println(ordValue);
        }
    }
}

관련 동영상 튜토리얼 추천: java video

위 내용은 Java 내부 클래스에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제