《Java编程思想》第四版之内部类学习之(一)——简单使用
来源:互联网 发布:beyond compare 3 mac 编辑:程序博客网 时间:2024/06/05 03:27
版权声明:学习内容均为本人笔记,代码均为本人依据课本所写或改编,笔记均为个人心得或书中摘抄
引言:内部类,即将一个类的定义放在另一个类的定义内部。内部类与组合是完全不同的概念。内部类看似是一种代码的隐藏机制,其实,它能够了解外部类,并且与之通信,这为我们的编程提供了极大的方便。
1.1创建内部类
//190public class Parcel2 {class Contents{private int i=11;public int value(){return i;}}class Destination{private String label;public Destination(String whereTo) {label=whereTo;}String readLabel(){return label;}}public Contents contents(){//外部类的方法,返回一个内部类对象return new Contents();}public void ship(String dest){Contents c=new Contents();Destination d=new Destination(dest);System.out.println(d.readLabel());}public static void main(String[] args){Parcel2 p=new Parcel2();p.ship("Tasmania");Parcel2 q=new Parcel2();Parcel2.Contents c=q.contents();//利用外部类的对象访问外部类方法,返回内部类的对象}}/*Output:Tasmania*/
从main中可以看出,我们从外部类的非静态方法中获取了内部类对象,所以必须指明这个对象的类型:OuterClassName.InnerClassName。
1.2链接到外部类
从main中,使用内部类最重要的一点就是,生成的内部类对象可以与制造它的外部类对象进行通信,它可以访问外部类对象的所有成员和外围类的所有元素,不需要任何条件。
//192页interface Selector{boolean end();Object current();void next();}public class Sequence {private Object[] items;private int next=0;public Sequence(int size){//固定数组大小items=new Object[size];}public void add(Object x){//在末尾添加新的Objectif(next<items.length)items[next++]=x;}private class SequenceSelector implements Selector{//内部类实现Selector接口,迭代器设计模式private int i=0;public boolean end(){//检查序列是否到达末尾return i==items.length;}public Object current(){//访问当前对象return items[i];}public void next(){//移动下标到虾一位if(i<items.length)i++;}}public Selector selector(){//返回一个内部类return new SequenceSelector();}public static void main(String[] args){Sequence sequence=new Sequence(10);for(int i=0;i<10;i++)sequence.add(Integer.toString(i));//初始化外部类对象中的数组Selector selector=sequence.selector();//创建内部类对象,指向接口,接口调用实例的具体方法while(!selector.end()){System.out.print(selector.current()+" ");//输出外部类数组中元素selector.next();}}}/*Output:1 2 3 4 5 6 7 8 9*/
从内部类可以看到,内部类中使用了外部类的private类型的数组item,由此可以看出,外部类对象拥有创建它外部类对象的所有成员的访问权。
原因:外部类创建内部类对象时,内部类对象会捕获一个指向外部类对象的引用,通过这个引用可以访问外部类的所有成员。
1.3使用.this和.new
生成外部类对象引用的方法:外部类的名字后面紧跟圆点和this,在编译期就会接受检查,没有运行开销。如果想让某个对象创建内部类对象,可以使用.new的语法来创建。
//193页public class Parcel3 {class Contents{private int i=11;public int value(){return i;}}class Destination{private String label;public Destination(String whereTo) {label=whereTo;}String readLabel(){return label;}}public static void main(String[] args){Parcel3 p=new Parcel3();Parcel3.Contents c=p.new Contents();//使用了.new语法创建内部类对象Parcel3.Destination d=p.new Destination("Tasmania");}}
1.4总结
内部类可以访问外部类的成员及方法,内部类对象的创建需要外部类的引用。获取外部类引用:外部类名字+圆点和this。
温馨提示:如果有什么错误,或者有什么意见(对于排版、知识块内容选取、讲述方式等),烦请评论或私聊,也许您的一个建议和一点指点能使我更加完善自己,也能让您感受到帮助他人的乐趣。祝您的编程之路一帆风顺!
如有交流请加微信:备注CSDN博友
阅读全文
1 0
- 《Java编程思想》第四版之内部类学习之(一)——简单使用
- 《Java编程思想》第四版之内部类学习之(二)——匿名内部类
- 《Java编程思想》第四版之内部类学习之(四)——内部类进阶
- 《Java编程思想》第四版之内部类学习之(三)——内部类的精妙之处
- 《Java编程思想》第四版之内部类学习——神奇而又实用
- Java编程思想第四版第十章学习——内部类(2)
- 《Java编程思想》之内部类——深奥而复杂
- 《Java编程思想》之内部类
- JAVA编程思想之内部类
- java编程思想之内部类
- Java编程思想之内部类
- Java编程思想之内部类
- Java编程思想第四版第十章学习——内部类(1)
- java编程思想第四版学习笔记-内部类
- java编程思想阅读之内部类
- JAVA学习之内部类(一)
- Java编程思想第四版读书笔记——第十章 内部类
- JAVA编程基础之内部类的简单使用
- VIM代码自动补全
- Hydra7.3安装
- Pycon 2017: Python可视化库大全
- 复习笔记(1)
- Linux initrd的解压与压缩
- 《Java编程思想》第四版之内部类学习之(一)——简单使用
- Java , HashMap与Big-man
- CSS盒模型
- TCP/IP协议是什么
- Flume部署及配置
- Charles使用教程
- Session Cursor的种类和用法
- Java中null、isEmpty的区别?
- 【mysql】 修改和删除表