> Java > java지도 시간 > 본문

Java 내부 클래스 인스턴스 분석

王林
풀어 주다: 2023-05-04 15:07:16
앞으로
1432명이 탐색했습니다.

    내부 클래스:

    사실 이름에서 알 수 있듯이 내부 클래스는 클래스 내의 클래스이고, 클래스 내에 또 다른 클래스가 있습니다.

    내부 클래스는 4가지로 나누어집니다.

    1. 일반 내부 클래스

    2. 정적 내부 클래스

    4. 익명 내부 클래스

    하나씩 알아볼까요~ ~

    A. 일반 내부 클래스:

    먼저 코드를 통해 이해해 봅시다:

    package InternalClass;
    /**
     * 内部类
     */
    public class Car {
        public int a = 10;
        public int b = 20;
        //外部类的方法
        public void method() {
            System.out.println("我是外部类Car的普通方法!");
            bus b = new bus();     //创建内部类的对象
            b.internalMethod();
        }
        //内部类(在Car类中的bus类)
        public class bus {
            int b = 30;
            //内部类方法
            public void internalMethod() {
                System.out.println("**这是bus内部类的普通方法!");
                System.out.println("**我是内部类,现在在访问外部类Car的a:" + a);
                System.out.println("**我是内部类,现在在访问内部类bus的b:" + this.b);
                System.out.println("**我是内部类,现在在访问外部类bus的b:" + Car.this.b);
                //注意,如果在内部类需要使用外部类的属性,必须通过外部的类去this外部类的属性
            }
        }    
    	//程序运行入口:
    	public static void main(String[] args) {
    	    Car car = new Car();   //创建外部类的对象
    	    car.method();
    	    // 运行上面的代码 会输出 : 我是外部类Car的普通方法!
    	   	//运行内部类的方法
    	   	//在上面method方法中已经创建了内部类bus的对象b
    	   	//这里就是通过使用外部类Car的对象car去new一个内部类对象
    	   	bus b = car.new bus();  
    	   	//通过内部类对象b 去使用方法即可
    	    b.internalMethod();   
    		//输出:
    		/*
    		**这是bus内部类的普通方法!
    		**我是内部类,现在在访问外部类Car的a:10
    		**我是内部类,现在在访问内部类bus的b:30
    		**我是内部类,现在在访问外部类bus的b:20
    */
       }
    }
    로그인 후 복사

    B 정적 내부 클래스:

    정적 내부 클래스도 이름에서 알 수 있듯이 내부 클래스를 static으로 수정합니다. 객체를 생성하지 않고 호출하려면 외부 클래스 이름을 사용하세요:

    package InternalClass;
    public class Person {
        String name = "小王";
        static int age = 20;
        //创建静态内部类
        public static class Student{
            String name = "小红";
            //静态内部类的方法
            public static void study(){
                Person p = new Person(); //创建外部类的对象
                //静态访问非静态需要使用对象去调用
                System.out.println("内部类静态方法访问外部非静态成员:"+p.name);
                System.out.println("内部类静态方法访问外部静态成员:"+Person.age);
                System.out.println("内部类静态方法访问内部非静态成员:"+new Student().name);
            }
        }
        //程序运行入口
        public static void main(String[] args) {
            //静态内使用方法不需要创建对象
            Student.study();
        }
    /*
    输出:
    内部类静态方法访问外部非静态成员:小王
    内部类静态方法访问外部静态成员:20
    内部类静态方法访问内部非静态成员:小红
    */
    }
    로그인 후 복사

    C. 메소드 내부 클래스:

    메소드 내부 클래스는 이름에서 알 수 있듯이 외부 클래스의 메소드 본문:

    package InternalClass;
    /**
     * 方法内部类
     */
    public class Student {
        //方法
        public void study(){
            int age = 20;
            String name = "小王";
            //在方法内写类:方法内部类
            class child{
                //方法内部类的方法
                public void play(){
                    System.out.println("孩子喜欢玩!");
                }
            }
            //在外部类study的方法内创建一个生成内部类child的对象,并使用方法
            child c = new child();
            c.play();
        }
        //程序执行入口
        public static void main(String[] args) {
            Student stu = new Student();
            //这里调用study方法后,在study方法体内创建了child的对象和调用了play的方法
            stu.study();  
        }
    }
    //输出:我叫:小王我今年:20我爱学习
    //	   孩子喜欢玩!
    로그인 후 복사

    내부 클래스 요약(제한 사항이 많으므로 사용 시나리오에 주의해야 함):

    1 클래스 앞에는 액세스 수정자가 있을 수 없습니다.

    2.

    3. 정적 정보는 생성할 수 없습니다.

    4. 직접 액세스할 수 있습니다. 메소드 내의 로컬 변수 및 매개변수는 수정할 수 없습니다.

    5. 외부 클래스의 모든 정보에 자유롭게 액세스할 수 있습니다.

    D. 익명 내부 클래스:

    익명 내부 클래스는 이름이 없는 내부 클래스입니다.

    먼저 정의하세요. 인터페이스:

    public interface USB {
        void read();
    }
    로그인 후 복사
    package InternalClass;
    /**
     * 匿名内部类
     */
    public class Child {
        public static void main(String[] args) {
            USB u = new USB() {
                @Override
                public void read() {
                    System.out.println("这是匿名内部类,是USB接口没有具名的子类,必须重写 接口做具体实现");
                }
            };
            u.read();
        }
    }
    로그인 후 복사

    익명 내부 클래스에 대한 네 가지 주의 사항:

    1. 클래스는 정적 멤버나 메소드를 정의할 수 없습니다.

    2. 익명 내부 클래스의 메소드는 추상일 수 없습니다.

    3. 익명 내부 클래스는 인터페이스 또는 추상 상위 클래스의 모든 추상 메소드를 구현해야 합니다.

    4. 외부 클래스 멤버 변수 또는 익명 내부 클래스에서 액세스하는 멤버 메서드는 static으로 수정해야 합니다.

    내부 클래스 요약:

    1. 내부 클래스를 사용하는 이유는 무엇입니까?

    내부 클래스는 클래스의 기본 특성을 가지고 있습니다. 즉, 상위 클래스를 상속하고 인터페이스를 구현할 수 있습니다. 실제 문제에서는 인터페이스로 해결할 수 없는 몇 가지 문제에 직면하게 됩니다. 이 경우 내부 클래스를 사용하여 특정 또는 클래스를 상속할 수 있습니다. 추상 클래스는 클래스가 다중 상속을 가질 수 없기 때문에 발생하는 일련의 문제를 간접적으로 해결합니다.

    2. 내부 클래스의 이점:

    내부 클래스는 여러 인스턴스를 사용할 수 있습니다. 각 인스턴스는 자체 상태 정보를 가지며 다른 주변 개체의 정보와 독립적입니다. , 내부 클래스는 더 나은 캡슐화를 제공합니다. 외부 클래스를 제외하고 다른 클래스는 내부 클래스 객체가 생성되는 순간에 액세스할 수 없으며 외부 클래스 객체의 생성에 의존하지 않습니다.

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

    관련 라벨:
    원천:yisu.com
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿