JAVA内部类(成员.局部.匿名)

一.成员内部类

定义在另一个类的内部,而且与成员方法和属性平级叫成员内部类。

注意:1.成员内部类中不能存在static关键字,即,不能声明静态属性、静态方法、静态代码块等。

   2.在成员内部类中访问外部类的成员方法和属性,要使用“外部类名.this.成员方法”和“外部类名.this.成员属性”的形式 。

   3.创建成员内部类的实例使用“外部类名.内部类名 实例名 = 外部类实例名.new 内部类构造方法(参数)”的形式。在创建内部类实例之前需要先创建外部类的实例对象。

   内部类的定义文件名形式是“外部类定义名$内部类定义名”

  java代码:

public class Girl {
    //成员内部类
    class Boy {
        public void go(){
            System.out.println("女神,我们今晚去约会");
        }
    }
    public void go(){
        Boy boy = new Boy();
        boy.go();
    }
    public static void main(String[] args) {
        Girl girl = new Girl();
        girl.go();
    }
}

运行结果:女神,我们今晚去约会

二.方法内部类

含义:定义在代码块、方法体内、作用域(使用花括号“{}”括起来的一段代码)内的类叫局部内部类。

1.局部内部类只能在代码代码块、方法体内和作用域中使用(创建对象和使用类对象)

.局部内部类的定义可以使用abstract修饰,声明为抽象类

代码如下:

package com.test.two;

public class RestStart {
    public void soEase(){
        System.out.println("没事,可以重装系统");
    }
}
package com.test.two;

public class Computer {
    //方法内部类
    public void play(){
        System.out.println("电脑中了病毒");
        class A extends RestStart{
            
        }
        new A().soEase();
        System.out.println("完全没有问题");
    }
    public static void main(String[] args) {
        new Computer().play();
    }
}

运行结果:

电脑中了病毒
没事,可以重装系统
完全没有问题

三.匿名内部类

.匿名内部类只能和new连用,用于创建一个实例。匿名内部类只能使用一次,创建实例之后,类定义会立即消失(想要多次使用就要用到反射的知识了)。

.匿名内部类必须继承一个类(抽象的、非抽象的都可以)或者实现一个接口。如果父类(或者父接口)是抽象类,则匿名内部类必须实现其所有抽象方法。

1.定义一个抽象类

package com.test.three;

public abstract class Work {
    public abstract void night();
}

2.定义一个类继承抽象类

package com.test.three;

public abstract class Teacher extends Work{

    @Override
    public void night() {
        
    }
    public void dayTime(){
        System.out.println("讲课");
    }
}

3.执行测试

package com.test.three;

public class TestOne {
    public static void main(String[] args) {
        Teacher t = new Teacher(){
            public void night(){
                System.out.println("批改作业");
            }
        };
        t.dayTime();
        t.night();
    }
}

4.运行结果:

讲课
批改作业

原文地址:https://www.cnblogs.com/HuangTong/p/6069328.html