c调用其他类的方法_聊聊Java内部类的设计思路

这篇讲讲内部类的设计思路,为什么Sun公司要苦心积虑的设计出这个内部类呢?原因如下

1.逻辑包含

如果A类在逻辑上包含B类,那么可以将B类设置为A类的内部类,比如OW(守望先锋)类可以作为FPS(第一人称射击)类的内部类:

public class FPS {

public class OW{}

}

设置内部类修饰符为private,此时内部类只能被外部类调用:

public class FPS {

private class OverWatch{}

}

2. 多重继承实现

每个内部类都能独立的继承一个接口,无论外部类是否已经继承了某个接口的实现,对于内部类都没影响

内部类提供可以继承多个抽象类或具体的类的能力

示例(子类利用多重继承来继承父亲的身高和母亲的美貌)

定义父类

d76f0ebb767b16cd144e11f0870d3953.png

定义母类

53984aa695e69f4d6c63794e1dd37eaf.png

定义子类

f6a9e7d42fd7e028431a2ca698a5e1f3.png

写一个调用方法

e3d8f6d141060f3da60ec7119c014a7c.png

输出结果

f8187a063715a59d05b2bd4430d07330.png

3. 闭包与回调

闭包是一个可调用的对象,记录了一些信息,这些信息来自于创建它的作用域

通过这个定义,可以看出内部类是面向对象的闭包,它不仅包含外部类对象(创建内部类的作用域)的信息

还自动拥有一个指向此外部类对象的引用,在此作用域内,内部类有权操作所有的成员,包括private成员

例如:一个基类A和一个接口B都有一个相同的方法C,相同的方法名,但含义截然不同,这时就需要闭包

基类A

f0ce17e9a4e2451ad1c4864851a3864d.png

接口B

022bf11e5b8fa4a27cc29c820b92dc48.png

闭包实现:

b546de46a2a9c50c0251caea6f6e53b0.png

Ason继承自 A, 直接实现A类的C()方法,然后使用内部类BInner实现接口的C()方法回调D()方法,这样就有两种意义的C方法。

如果Ason同时继承自 A且实现 B接口,就不能同时实现A和B的不同的 C()方法:

652cf489c05680234c73fdc426ee6d07.png

下一篇讲讲内部类的各种相关概念,比如匿名内部类和私有内部类等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值