当前位置:   article > 正文

学习笔记---内部类_内部类算字段吗

内部类算字段吗

内部类

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

  • 最常见的内部类之一,其定义也很简单,在一个类里面作为类的一个字段直接定义
public class Outer {
    public class inner{
        
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 成员内部类可以访问外部类所有的属性和方法。但是外部类要访问成员内部类的属性和方法,必须要先实例化成员内部类。
  • 注意点:成员内部类里面不能包含静态的属性和方法
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();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 实例化成员内部类的代码
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();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
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();    //这是外部类的方法!
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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("学生正在说话");
            }
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
package oop.Demo09;

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

        Student student = new Student();
        student.study();    //学生正在学习
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
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();    //这是外部类的方法!
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

4. 匿名内部类

  • 待补充
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/683173
推荐阅读