Java四十一:类的内部成员之五:内部类

内部类

一、概述
  1. 定义:

    当一个类的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为该类提供服务,那么最好使用内部类

  2. Java中允许将一个类A声明在一个类B中,则类A就是内部类,类B称为外部类

  3. 分类:

    成员内部类(静态、非静态)

    局部内部类(创建在代码块、构造器、方法内)

二、内部类特性
  1. 作为外部类的成员结构

    ① 可以被static修饰
    ② 可以被4种不同的权限修饰符修饰

  2. 作为一个类

    ① 类内可以定义属性、代码块、构造器、方法。
    ② 可以被final修饰,表示此类不能被继承。
    ③ 可以调用外部类的结构

三、搞清楚 3 个问题
  1. 如何实例化成员内部类的对象
  2. 如何在成员内部类中区分调用外部类的结构
  3. 开发中局部内部类的使用
package inner;
import static javax.swing.text.html.HTML.Tag.DD;
public class InnerClassTest {
    public static void main(String[] args) {
		// 1.外部类实例化,就实现了对代码块内部类和构造器内部类的调用
        Person p = new Person();
		// 2.局部内部类的调用,通过调用局部内部类所在方法实现
        p.inner();
		// 3.非静态成员内部类的调用,外部类对象调用。
        Person.DD dd = p.new DD();		    
        dd.dMethod();
		// 4.静态成员内部类的调用,外部类类名调用
        Person.EE ee = new Person.EE();
        ee.eMethod();		
    }
}
// 外部类
class Person{
    String name = "外部类的属性";
    int age;
    // 1.外部类的代码块
    {
        // 1.1 代码块的内部类
        class AA{
            public void aMehtod(){
                System.out.println("代码块内的局部内部类");
            }
        }
        // 1.2 实例化内部类
        AA aa = new AA();
        // 1.3 内部类对象调用自身方法
        aa.aMehtod();
    }
    // 2.外部类的构造器
    public Person(){
        // 2.1 构造器的内部类
        class BB{
            public void bMethod(){
                System.out.println("构造器内的局部内部类");
            }
        }
        // 2.2 实例化内部类
        BB bb = new BB();
        // 2.3 内部类对象调用自身方法
        bb.bMethod();
    }
    // 3.外部类的方法
    public void inner(){
        // 3.1 方法内的内部类
        class CC{
            public void cMethod(){
                System.out.println("方法内的局部内部类");
            }
        }
        // 3.2 实例化内部类
        CC cc = new CC();
        // 3.3 内部类对象调用自身方法
        cc.cMethod();
    }
    // 4.非静态成员内部类
    class DD{
        // 4.1 成员内部类的属性
        String name = "内部类的属性";
        // 4.2 成员内部类的方法
        public void dMethod(){
            System.out.println("非静态成员内部类方法");
        }
        // 4.3 成员内部类方法内的结构调用
        public void dTransfer(String name){
            // ① 调用形参
            System.out.println(name);
            // ② 调用当前类的属性
            System.out.println(this.name);
			// ③ 调用外部类的属性
            System.out.println(Person.this.name);
			// ④ 调用外部类的方法
            Person.this.inner();
        }
    }
    // 5.静态成员内部类
    static class EE{
        public void eMethod(){
            System.out.println("静态成员内部类方法");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

e_nanxu

感恩每一份鼓励-相逢何必曾相识

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

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

打赏作者

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

抵扣说明:

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

余额充值