目录

  • 一、内部类
  • 1、内部类详解
  • 2、内部类分类
  • 1)定义在外部类局部位置上
  • 2)定义在外部类成员位置上
  • 3、局部内部类的使用
  • 4、匿名内部类的使用


一、内部类

1、内部类详解

定义:

一个类的内部又完整的嵌套了另一个类结构。被嵌套的类称为内部类,嵌套它的类称之为外部类。

特点:

可以直接访问私有属性,可以提现类与类之间的包含关系

注意:

内部类是重点,也是学习难点,源代码有大量的内部类

语法:

class Outer{ //外部类
	class Inner{ //内部类
	}
}
class Other{ //外部其他类
}

get java 内部类 java内部类详解_jvm

public class ClassStructure {  //其它外部类
    public static void main(String[] args) {
        Outer outer = new Outer();
    }
}

class Inner {  //内部类
    private String name;  //属性
    private int age;

    public Inner(String name, int age) {  //构造器
        this.name = name;
        this.age = age;

        System.out.println("姓名: " + this.name + ", 年龄: " + this.age);
    }
}

class Outer { //外部类
    private void run() {  //方法
        System.out.println("方法。。。。");
    }

    {  //代码块
        System.out.println("代码块。。。。");
    }

    Inner inner = new Inner("张三", 18);
}

2、内部类分类

1)定义在外部类局部位置上

  • 局部内部类(有类名)
  • 匿名内部类(没有类名)

2)定义在外部类成员位置上

  • 成员内部类(没用static修饰)
  • 静态内部类(使用static修饰)

3、局部内部类的使用

局部内部类是定义在外部类的局部位置,例:方法带有类名
1、可以直接访问外部类的所有成员,包含私有
2、不能添加访问修饰符,它是一个局部变量。局部变量不能使用修饰符,可以使用final修饰
3、作用域:方法或代码块中
4、局部内部类访问外部类成员直接访问
5、外部类访问内部类成员,创建新的对象,再访问(作用域内)
6、外部其它类不能访问局部内部类
7、外部类和内部类成员重名,遵循就近原则,或者使用外部类名.this.类名

get java 内部类 java内部类详解_get java 内部类_02

public class ClassStructure {  //其它外部类
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.run();
    }
}
class Outer { //外部类
    private String name = "李四";
    private void eat(){
        System.out.println("苹果好吃");
    }
    public void run() {  //方法
        /*
        局部内部类是定义在外部类的局部位置,一般在方法内
        不能添加访问修饰符,可以使用final
        作用域:方法或代码块中
         */
        final class Inner2{ //局部内部类,其实还是一个类
            //可以直接访问外部类的所有成员
            private void running(){
                //外部类和内部类成员重名,遵循就近原则,或者使用外部类名.this.类名
                String name = "王五";
                name = Outer.this.name;
                System.out.println(name);

                eat();
            }
        }
        Inner2 inner2 = new Inner2();
        inner2.running();
    }
}

4、匿名内部类的使用

1、本质是类
2、没有类名
3、内部类
4、是一个对象

注意:

匿名内部类是一个类的定义,它也是一个对象,既有定义类特征,也有创建对象的特征。
语法:

new 类或接口(参数列表){
	类体
}

get java 内部类 java内部类详解_java_03

interface Sports{
    void run();
}

public class ClassStructure {  //其它外部类
    public static void main(String[] args) {
        //当做实参直接传递使用
        person(new Sports() {
            @Override
            public void run() {
                System.out.println("喜欢跑步。。。。。。。。");
            }
        });
    }

    //静态方法,形参接口类型
    public static void person(Sports sports){
        sports.run();
    }
}