【Java基础】内部类

1.内部类

在一个类的内部再定义一个类,内部类和外部类名字不能相同。
可以分为

  • 成员内部类:静态、非静态
  • 局部内部类:方法内、代码块内、构造器内,匿名内部类

2.成员内部类

(1)非静态

① 和普通类差不多,可以在内部定义属性、方法、构造器等结构。
② 可以使用public、protected、缺省、private修饰。
③ 可以用abstract、final修饰。
④ 不能用static修饰内部类中的结构。
image

public class Person {
    String name = "张三";

    public void eat() {
        System.out.println("张三吃东西");
    }

    class Bird {
        String name = "小杜";

        public void fly(String name) {
            System.out.println(name+"起飞");
        }
    }
}

⑤ 使用外部类的结构
成员内部类可以直接使用外部类的所有成员,包括私有数据。

        public void fly(String name) {
            System.out.println(name+"起飞");    //形参
            System.out.println(this.name+"起飞");    //内部类属性
            System.out.println(Person.this.name+"起飞");   //外部类属性
        }

⑥ 使用内部类的结构
Person类中,直接创建对象

Bird bird1 = new Bird();
bird1.fly("3");
//或者
Person.Bird bird2 = new Person.Bird();
bird2.fly("2");

Person 类外

Person person = new Person();
Person.Bird bird3 = person.new Bird();
bird3.fly("3");

(2)static修饰,静态

内部类是静态的,有一个静态属性age。
① 当想要在外部类的静态成员部分使用内部类时,可以考虑内部类声明为静态的。
② 内部类成员想要用static修饰,则内部类也要用static修饰,否则报错。

public class Person {
    String name = "张三";

    public void eat(String name) {

    }

    static class Bird {
        String name = "小杜";

        static int age = 4;

        public void fly(String name) {
            System.out.println(name + "起飞");    //形参
        }
    }
}

③ 调用内部类的静态结构

public static void main(String[] args) {
    System.out.println(Bird.age);
}

3.局部内部类

(1)局部内部类
写在方法或代码块中,先声明后使用,作用域为所在花括号内。

public class Person {
    String name = "张三";

    public void eat(String name) {
        class Bread{
            private int price;
            public void sell(){
                System.out.println("卖面包");
            }
        }
    }
}

特点

  • 局部内部类仍是一个独立的类,编译后会产生独立的.class文件,但是前面会加上外部类的类名、$符号和数字编号。
  • 只能在作用域范围内使用,先声明后使用,类似局部变量,因此局部内部类不能用权限修饰符。
  • 可以使用外部类的成员,包括私有的。
  • 局部内部类不能使用static修饰,因此也不能包含静态成员。

(2)匿名内部类
某个局部类只需要使用一次,定义在new的后面,隐含实现一个接口或一个类。
Java匿名内部类

posted @ 2022-09-26 18:43  植树chen  阅读(38)  评论(0编辑  收藏  举报