Java内部类详解(一)(转自:http://blog.csdn.net/wangpeng047/article/details/12344593)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java内部类详解(一)(转自:http://blog.csdn.net/wangpeng047/article/details/12344593),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3435字,纯文字阅读大概需要5分钟。
内容图文
![Java内部类详解(一)(转自:http://blog.csdn.net/wangpeng047/article/details/12344593)](/upload/InfoBanner/zyjiaocheng/1199/1694eed8e08b4c548363136590d27ecd.jpg)
很多人对于Java内部类(Inner Class)都十分陌生,甚至听都没听过也没有使用过,内部类在Java中其实是比较重要的一块内容,掌握好这门知识对于编程来说,犹如插上一对翅膀。
一、概念
内部类是指在一个外部类的内部再定义一个类,类名不需要和文件名相同。
对于一个名为outer的外部类和其内部定义的名为inner的内部类。编译完成后会生成outer.class和outer$inner.class两个类。所以内部类的成员变量、方法名可以和外部类的相同。
内部类可以是静态static和非静态的,访问级别可用public,default,protected和private修饰。而外部顶级类即类名和文件名相同的只能使用public和default。
二、作用
为什么使用内部类?使用内部类能带来什么好处?
我们用个例子来说明:
- public class Work {
- public String getContent() {
- return null;
- }
- }
- public class Tool {
- public void use() {
- }
- }
- public class Person {
- private String name;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Work getWork() {
- return new Work();
- }
- public Tool getTool() {
- return new Tool();
- }
- }
- public class Programmer extends Person {
- private String language;
- private class Programming extends Work {
- @Override
- public String getContent() {
- return "搭建框架";
- }
- }
- protected class Computer extends Tool {
- private String soft;
- @Override
- public void use() {
- this.soft = "Eclipse";
- Programmer.this.language = this.soft + "工具中的Java语言";
- }
- }
- public void doWork() {
- getTool().use();
- System.out.println(getName() + "用" + language + getWork().getContent());
- }
- @Override
- public Work getWork() {
- return new Programming();
- }
- @Override
- public Tool getTool() {
- return new Computer();
- }
- public static void main(String[] args) {
- Programmer programmer = new Programmer();
- programmer.setName("王鹏");
- programmer.doWork();
- }
- }
运行结果:
- 王鹏用Eclipse工具中的Java语言搭建框架
这个简单例子是描述一个程序员的工作,在现有Person、Tool、Work三个类的基础上,衍生出了程序员Programmer类。Programmer类中定义了内部类Programming和Computer,并且访问级别分别是private和protected。
1. 封装
通过上面例子的main方法中,我们看到,调用者并不知道Programming和Computer这两个内部类的存在,对外只暴漏了Programmer类。由于Programming和Computer只是为Programmer服务的,完全没必要单独建立个类文件,因而通过内部类我们可以隐藏掉不想让别人知道的操作。内部类是封装性的进一步体现。
2. 多继承
我们知道,Java是单继承语言,只能继承一个类,然而通过内部类,我们可以变相实现“多继承”。例如上面的例子中,Programming继承Work,Computer继承Tool,Programmer继承Person,而Programming和Computer是Programmer的内部类,因此就相当于Programmer继承了Person、Work、Tool这三个类,同样能实现多态,代码如下:
- public class Programmer extends Person {
- public class Programming extends Work {
- public Person getPerson() {
- return Programmer.this;
- }
- }
- public class Computer extends Tool {
- public Person getPerson() {
- return Programmer.this;
- }
- }
- }
- public class ProgrammerTest {
- private Programmer programmer;
- public ProgrammerTest() {
- programmer = new Programmer();
- programmer.setName("王鹏");
- }
- public Work testWork() {
- return programmer.new Programming();
- }
- public Tool testTool() {
- return programmer.new Computer();
- }
- public Person testPerson() {
- return programmer;
- }
- public static void main(String[] args) {
- ProgrammerTest test = new ProgrammerTest();
- Programmer programmer = (Programmer) test.testPerson();
- System.out.println(programmer.getName());
- Programmer.Computer computer = (Programmer.Computer) test.testTool();
- programmer = (Programmer) computer.getPerson();
- System.out.println(programmer.getName());
- Programmer.Programming programming = (Programmer.Programming) test.testWork();
- programmer = (Programmer) programming.getPerson();
- System.out.println(programmer.getName());
- // 方法入参的多态就不掩饰了,如testTool(Tool tool),可将Tool转化为Programmer
- }
- }
输出结果:
- 王鹏
- 王鹏
- 王鹏
由上个例子可以看出,Person、Tool、Programming都可以转化为同一个Programmer,从而实现了“多继承”的多态体现。内部类是Java多继承的技术实现的手段。
Java内部类详解(三)
原文:http://www.cnblogs.com/yongwangzhiqian/p/3960240.html
内容总结
以上是互联网集市为您收集整理的Java内部类详解(一)(转自:http://blog.csdn.net/wangpeng047/article/details/12344593)全部内容,希望文章能够帮你解决Java内部类详解(一)(转自:http://blog.csdn.net/wangpeng047/article/details/12344593)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。