这一章节我们来讨论一下为什么需要内部类?
答案:为实现多重继承提供便利。
在实现多重继承方面有两种方式:内部类以及接口。
1.接口
package com.ray.ch08;
public class Sequence implements A, B {
}
interface A {
}
interface B {
}
接口其实不用多说,你实现多少个都可以,然后只有根据接口就可以向上转型,调用相关的方法。
2.内部类
当我们需要继承实现的是类或者抽象类,根据语法规则,是不可以多重继承的,那么现在内部类就发挥作用了。
package com.ray.ch08;
public class Sequence implements A, B {
class C implements A, B {
}
}
interface A {
}
interface B {
}
package com.ray.ch08;
public class Sequence extends A {
class C extends A {
}
}
abstract class A {
}
从上面的代码看出,无论外部类实现什么接口或者继承什么类,对于内部类来说都是没有任何影响。
注意:只有在需要实现多重继承的时候才考虑内部类,不然一般不使用这种复杂的编程方式,因为影响代码的可读性。
当使用内部类之后,将获得以下特性:
(1)内部类可以有多个实例,而且实例跟外部类之间的通信是分开的。
package com.ray.ch08;
public class Sequence extends A {
private int id = 0;
class C extends A {
public void setId(int id1) {
System.out.println(id);
id = id1;
}
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public static void main(String[] args) {
Sequence sequence1 = new Sequence();
C c1 = sequence1.new C();
c1.setId(2);
System.out.println(sequence1.getId());
Sequence sequence2 = new Sequence();
C c2 = sequence2.new C();
c2.setId(3);
System.out.println(sequence2.getId());
}
}
abstract class A {
}
输出:
0
2
0
3
从输出可以看见,虽然我们在第一次new C的时候改变了id,但是在第二此new C的时候是不受改变,因为它们分属不同实例,各自具有独立的状态。
(2)在单个外部类,里面的内部类可以使用不同的方式来实现同一个接口或者继承同一个类。
package com.ray.ch08;
public class Sequence {
class B implements A {
@Override
public void run() {
System.out.println("run1");
}
}
class C implements A {
@Override
public void run() {
System.out.println("run2");
}
}
public static void main(String[] args) {
}
}
interface A {
void run();
}
总结:这一章节主要说明了为什么需要内部类,就是多重继承,当然一般我们是用不上的。
这一章节就到这里,谢谢。
-----------------------------------
目录
分享到:
相关推荐
Aruba-Instant-8.11.2.0-User-Guide
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
Alibaba Dragonwell,一款由阿里巴巴集团推出的免费OpenJDK发行版,为开发者们提供了一个稳定且高效的Java运行环境。它以OpenJDK为基础,并在其中融入了阿里巴巴自身的技术积累,致力于提供长期支持,包括持续的性能...
资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:phonenumberslite-8.11.5-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
Aruba 503 Series Campus Access Points Other Accessories Aruba 560 Series Outdoor Access Points Aruba 500H Series Hospitality Access Points Aruba 500 Series Campus Access Points
2021人教版数学一年级上册课件-8.11 整理和复习.pptx
VC++经验技巧宝典配套代码08章8.6-8.11 包括: 8.6图像基础技术 8.7多媒体声音控制 8.8多媒体应用 8.9动画效果 8.10多媒体文件的播放 8.11Direct Show编程 8.1-8.5已上传
Aruba Access Points v8.11.2.0 (SSR) Aruba 318 Series Hardened Access Points Aruba 370 Series Outdoor Access Points Aruba 310 Series Campus Access Points IAP-315 IAP-314
Aruba Access Points v8.11.2.0 (SSR) Aruba 360 Series Outdoor Access Points Aruba 303 Series Campus Access Points Aruba 303H Series Hospitality Access Points Aruba 300 Series Campus Access Points IAP...
Aruba Access Points v8.11.1.1 (SSR) 适用于以下产品 Aruba 360 Series Outdoor Access Points Aruba 303 Series Campus Access Points Aruba 303H Series Hospitality Access Points Aruba 300 Series Campus ...
Aruba Access Points v8.11.2.0 (SSR) Aruba 610 Series Campus Access Points
Aruba Access Points v8.11.2.0 (SSR) Aruba 650 Series Campus Access Points Aruba 630 Series Campus Access Points
Aruba Access Points v8.11.1.0 (SSR) 适用于 Aruba 610 Series Campus Access Points
Aruba Access Points v8.11.1.1 (SSR) 适用于以下产品 Aruba 610 Series Campus Access Points
Aruba Access Points v8.11.2.0 (SSR) Aruba 518 Series Hardened Access Points Aruba 570 Series Outdoor Access Points Aruba 510 Series Campus Access Points
Aruba Access Points v8.11.1.1 (SSR) 适用于以下系列产品 Aruba 650 Series Campus Access Points Aruba 630 Series Campus Access Points
Aruba Access Points v8.11.1.0 (SSR) 适用于以下型号 Aruba 650 Series Campus Access Points Aruba 630 Series Campus Access Points
Aruba Access Points v8.11.2.0 (SSR) Aruba 580EX Series Hazardous Location Access Points Aruba 580 Series Outdoor Access Points Aruba 550 Series Campus Access Points Aruba 530 Series Campus Access ...
Aruba Access Points v8.11.2.0 (SSR) Aruba 503 Series Campus Access Points Other Accessories Aruba 560 Series Outdoor Access Points Aruba 500H Series Hospitality Access Points Aruba 500 Series Campus ...