java学习笔记32:内部类:静态和非静态内部类、匿名内部类、方法内部类

一、内部类

内部类(innerclasses):把一个类放在另一个类的内部定义
  
  内部类可以使用public、default、protected 、private以及static修饰。而外部顶级类(我们以前接触的类)只能使用public和default修饰。

注意
  内部类只是一个编译时概念,一旦我们编译成功,就会成为完全不同的两个类。对于一个名为Outer的外部类和其内部定义的名为Inner的内部类。编译完成后会出现Outer.class和Outer$Inner.class两个类的字节码文件。所以内部类是相对独立的一种存在,其成员变量/方法名可以和外部类的相同。

示例:

/**外部类Outer*/
class Outer {
    private int age = 10;
    public void show(){
        System.out.println(age);//10
    }
    /**内部类Inner*/
    public class Inner {
        //内部类中可以声明与外部类同名的属性与方法
        private int age = 20;
        public void show(){
            System.out.println(age);//20
        }
    }
}

编译后会产生两个不同的字节码文件:
在这里插入图片描述
内部类的作用:

  1. 内部类提供了更好的封装。只能让外部类直接访问,不允许同一个包中的其他类直接访问。

  2. 内部类可以直接访问外部类的私有属性,内部类被当成其外部类的成员。 但外部类不能访问内部类的内部属性。

  3. 接口只是解决了多重继承的部分问题,而内部类使得多重继承的解决方案变得更加完整。

内部类的使用场合:

  1. 由于内部类提供了更好的封装特性,并且可以很方便的访问外部类的属性。所以,在只为外部类提供服务的情况下可以优先考虑使用内部类。

  2. 使用内部类间接实现多继承:每个内部类都能独立地继承一个类或者实现某些接口,所以无论外部类是否已经继承了某个类或者实现了某些接口,对于内部类没有任何影响。

二、内部类的分类

在Java中内部类主要分为成员内部类(非静态内部类、静态内部类)、匿名内部类、局部内部类(很少用到)。

1、成员内部类:静态、非静态内部类

成员内部类可以使用private、default、protected、public任意进行修饰。
类文件:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java中,匿名内部类是一种特殊的内部类,它没有显式的类名。匿名内部类通常用于创建一个只需要使用一次的类的实例。匿名内部类可以通过继承一个类或实现一个接口来实现。 比较匿名内部类的方式有两种。第一种是通过继承一个类来创建匿名内部类。在这种情况下,匿名内部类会继承指定类的所有方法和属性,并可以重写其中的方法。通过重写方法,可以实现自定义的行为。 第二种方式是通过实现一个接口来创建匿名内部类。在这种情况下,匿名内部类会实现指定接口的所有方法,并可以在方法中定义自己的逻辑。 例如,可以使用匿名内部类来实现一个接口的方法,如下所示: ``` Interface01 interface01 = new Interface01() { @Override public void show() { System.out.println("使用了匿名内部类"); } }; interface01.show(); ``` 在这个例子中,我们创建了一个匿名内部类,实现了Interface01接口的show()方法,并在方法中输出了一条信息。 需要注意的是,匿名内部类在编译期间会生成一个以$编号结尾的class文件,即它被识别为一个真实的类。在编译前(java文件)时,它是以匿名的形态存在的。\[2\]\[3\] #### 引用[.reference_title] - *1* [【java笔记Java中的匿名类和匿名内部类](https://blog.csdn.net/zuzhiang/article/details/118016420)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Java基础——匿名内部类](https://blog.csdn.net/qq_52519008/article/details/127154696)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值