Java 面向对象之内部类

概述

什么是内部类

将⼀个类A定义在另⼀个类B⾥⾯,⾥⾯的那个类A就称为内部类, B则称为外部类。

成员内部类

成员内部类
定义在类中⽅法外的类。定义格式:在描述事物时,若⼀个事物内部还包含其他事物,就可以使⽤内部类这种结构。⽐如,汽⻋类 Car 中包含发动机类 Engine ,这时, Engine就可以使⽤内部类来描述,定义在成员位置。

使用:

内部类可以直接访问外部类的成员,包括私有成员。
外部类要访问内部类的成员,必须要建⽴内部类的对象。

		//实例化外部类对象
		InnerClassMember m = new InnerClassMember();
        m.wai2();
        //实例化内部类对象
        InnerClassMember.Memberclass nei = m.new Memberclass();

内部类和外部类有同名成员变量

  外部类的成员变量: 外部类.this.变量 
  内部类的成员变量: this.变量

局部内部类(包含:匿名内部类)[重点]

在方法内部定义类, 只在方法中有效
在局部内部类中, 使用局部变量, 必须是final的
JDK8 后, 局部变量事实上没有发生改变, 那么final可以省略
一次性的类, 只能用一次
不能使用权限修饰符

局部内部类, 需要类只使用一次, 优化 -> 匿名内部类

匿名内部类:是内部类的简化写法。它的本质是⼀个 带具体实现的父类或者父接口的 匿名的子类对象。

匿名内部类必须继承⼀个⽗类或者实现⼀个⽗接⼝。

public interface ToolMan {
    public abstract void use();
}
public class UseTool {
    public static void main(String[] args) {
        /*匿名内部类 省略了中间的实现类--new ToolMan(){....}*/
        showUse(new ToolMan() {
            @Override
            public void use() {
                System.out.println("用了一次");
            }
        });
    }

    public static void showUse(ToolMan t){
        t.use();
    }
}

实现方式

接口名/抽象类名 对象名(m) = new 接口名/抽象类名(){.....@Override重写函数.....};
FlyAble f = new FlyAble() { public void fly() {System.out.println("我⻜了~~~");} };
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值