学习笔记---内部类

内部类

1. 成员内部类(普通内部类)

  • 最常见的内部类之一,其定义也很简单,在一个类里面作为类的一个字段直接定义
public class Outer {
    
    
    public class inner{
    
    
        
    }
}
  • 成员内部类可以访问外部类所有的属性和方法。但是外部类要访问成员内部类的属性和方法,必须要先实例化成员内部类。
  • 注意点:成员内部类里面不能包含静态的属性和方法
package oop.Demo09;

public class Outer {
    
    
    public void test1(){
    
    

    }

    private void test2(){
    
    

    }

    public static void test3(){
    
    

    }

    public class inner{
    
    
        public void test(){
    
    
            test1();
            test2();
            test3();
        }
    }
}
  • 实例化成员内部类的代码
package oop.Demo09;

public class Outer {
    
    
    public int id = 10;
    public void run1(){
    
    
        System.out.println("这是外部类的方法!");
    }

    public class inner{
    
    
        public void run2(){
    
    
            System.out.println("这是内部类的方法!");
        }

        public void GetId(){
    
    
            System.out.println("外部类中的id:"+id);
        }

        //run1();   报错
        public void run(){
    
    
            Outer.this.run1();
        }
    }
}
package oop.Demo09;

public class Application {
    
    
    public static void main(String[] args) {
    
    

        Outer outer = new Outer();
        outer.run1();   //这是外部类的方法!

        Outer.inner inner = outer.new inner();//实例化成员内部类

        //调用成员内部类的方法时直接用inner
        inner.run2();   //这是内部类的方法!
        inner.GetId();  //外部类中的id:10
        inner.run();    //这是外部类的方法!
    }
}

2. 局部内部类

  • 定义在代码块内的一个内部类。在方法里面定义一个内部类,就是局部内部类。局部内部类的使用范围仅在其所在的代码块中
  • 不能被public ,protected,private以及static修饰,能被final修饰
  • 局部内部类可以访问外部类对象的所有属性和方法,而外部类却不能访问局部内部类中的属性和方法,因为局部内部类的定义只在其所在的代码块中有效,一旦出了这个区域,那么其定义就失效了

代码示例:

package oop.Demo09;

public class Student {
    
    
    public static void study(){
    
    

        System.out.println("学生正在学习");
        //局部内部类
        final class StudentSay{
    
    
            public void say() {
    
    
                System.out.println("学生正在说话");
            }
        }
    }
}
package oop.Demo09;

public class Application {
    
    
    public static void main(String[] args) {
    
    

        Student student = new Student();
        student.study();    //学生正在学习
    }
}

3. 静态内部类

  • 在成员内部类多加了一个 static 关键字。静态内部类只能访问外部类的静态成员变量和方法,包括private属性和方法
package oop.Demo09;

public class Outer {
    
    
    public static int id = 10;
    public static void run1(){
    
    
        System.out.println("这是外部类的方法!");
    }

    static class Inner{
    
    
        public void run2(){
    
    
            System.out.println("这是内部类的方法!");
        }

        public void GetId(){
    
    
            System.out.println("外部类中的id:"+id);
        }

        //run1();   报错
        public void run(){
    
    
            Outer.run1();
        }
    }
}
package oop.Demo09;

public class Application {
    
    
    public static void main(String[] args) {
    
    

        Outer outer = new Outer();
        outer.run1();   //这是外部类的方法!

        //静态内部类实例化
        Outer.Inner inner = new Outer.Inner();

        //调用成员内部类的方法时直接用inner
        inner.run2();   //这是内部类的方法!
        inner.GetId();  //外部类中的id:10
        inner.run();    //这是外部类的方法!
    }
}

4. 匿名内部类

  • 待补充

猜你喜欢

转载自blog.csdn.net/yang862819503/article/details/113757713