【JAVA 基础 第(12)课】“ 内部类 ”的所有使用场景作了详细介绍,肯定有你不知道的部分

目录

内部类使用的场合

非静态内部类

静态内部类:static修饰的内部类

局部内部类:定义在方法中的内部类

匿名内部类

运行结果:


内部类使用的场合

  • 针对接口或抽象类这些不能直接new创建对象的数据类型,使用匿名内部类创建对象
  • 完成复杂的功能,设计辅助外部类的类,并不想把类的细节公布出去,可以使用内部类

非静态内部类

  • 访问外部类的静态成员和非静态成员,包括 private 修饰的
public class OuterClass {

    //静态成员变量
    private static double pi = 5.13;

    //非静态的成员
    private String str = "您好";

    class Inner{
        public void print(){
            System.out.println("静态成员pi="+pi);
            System.out.println("非静态成员str="+str);
        }
    }
}

静态内部类:static修饰的内部类

  • 访问外部类的静态成员,包括private修饰的,但不能访问外部类非静态的成员
public class OuterClass {

    //静态成员变量
    private static double pi = 5.13;

    //非静态的成员
    private String str = "您好";

   static class Static_Inner{
        public void print(){
            System.out.println("静态成员pi="+pi);
            //System.out.println("非静态成员str="+str);  //不能访问外部类非静态的成员
        }
    }
}

局部内部类:定义在方法中的内部类

  • 访问外部类中静态成员和非静态成员,包括private修饰的
  • 访问局部常量(final修饰的),不能访问局部变量(jdk1.7)
public class OuterClass {

    //静态成员变量
    private static double pi = 5.13;

    //非静态的成员
    private String str = "您好";

    public void test(){
        int i = 5;			//局部变量
        final int I = 99;	//局部常量

        class Local{
            public void print(){
                System.out.println("静态成员pi="+pi);
                System.out.println("非静态成员str="+str);
                //System.out.println("局部变量i="+i); //不能访问局部变量
                System.out.println("局部常量I="+I); 	//可以访问局部常量
            }
        }

        //在方法中创建局部内部类对象
        Local lc = new Local();
        lc.print();
    }
}

匿名内部类

  • 针对接口或抽象类这些不能直接 new 创建对象的数据类型,通过匿名内部类创建对象
  • 匿名内部类创建对象只能使用一次
  • 主要用于事件监听器的创建
public class OuterClass {

    //静态成员变量
    private static double pi = 5.13;

    //非静态的成员
    private String str = "您好";

    public void anonymous(){
        //定义一个抽象类 Abstract_Class ,不能直接 new 创建对象,通过匿名内部类创建对象
        Abstract_Class ac = new Abstract_Class(){
            @Override
            public void abstract_method() {
                System.out.println("abstract_method()");
            }
        };
        ac.abstract_method();
    }
}
public abstract class Abstract_Class {
    public abstract void abstract_method();
}

运行结果:

public class Test {

    public static void main(String[] args) {

        //创建外部类对象
        OuterClass out = new OuterClass();

        System.out.println("*********创建非静态内部类对象,依赖于外部类对象*********");
        OuterClass.Inner in = out.new Inner();
        in.print();

        System.out.println("*********创建静态内部类对象,通过外部类类名*********");
        OuterClass.Static_Inner s_in = new OuterClass.Static_Inner();
        s_in.print();

        System.out.println("*********运行局部内部类中的方法*********");
        new OuterClass().part();
        System.out.println();

        System.out.println("*********运行匿名内部类中的方法*********");
        new OuterClass().anonymous();
    }
}

输出:

*********创建非静态内部类对象,依赖于外部类对象*********
静态成员pi=5.13
非静态成员str=您好


*********创建静态内部类对象,通过外部类类名*********
静态成员pi=5.13


*********运行局部内部类中的方法*********
局部内部类中访问:
静态成员pi=5.13
非静态成员str=您好
局部常量I=99

*********运行匿名内部类中的方法*********
abstract_method()
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑口罩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值