首页 > 编程语言 >Java编程思想5

Java编程思想5

时间:2022-12-22 21:33:59浏览次数:37  
标签:Java 思想 对象 void 编程 class Inner new public

第十章:内部类
可以将一个类得定义放在另一个类得定义内部,这就是内部类。

链接到外部类
在最初,内部类看起来就像是一种代码隐藏机制;其实它还有其他用途。当生成一个内部类的对象时,此对象与制造它的外围对象之间就有了一种联系,所以它能访问其外围对象的所有成员,而不需要任何特殊条件。此外,内部类还拥有其外围类的所有元素的访问权。如下:

interface Selector {
// 检查元素是否到末尾
boolean end();
// 访问当前对象
Object current();
// 移动到序列中的下一个对象
void next();
}

public class Sequence {
private Object[] items;
private int next = 0;

public Sequence(int size) {
this.items = new Object[size];
}

public void add(Object o) {
if (next < items.length) {
items[next++] = o;
}
}

// 内部类可以访问外围类的方法和字段
private class SequenceSelector implements Selector {
private int i = 0;

@Override
public boolean end() {
// 内部类自动拥有对其外围类所有成员的访问权
return i == items.length;
}

@Override
public Object current() {
return items[i];
}

@Override
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();
}
}
}

使用.this 和 .new

  1. 如果你需要生成对外部对象的引用,可以使用外部类的名字后面紧跟原点和this。这样产生的引用会自动地具有正确的类型,这一点在编译器就会被知晓并受到检查,因此没有任何运行时开销,如下:

public class DoThis {
void f() {
System.out.println("DoThis.f()");
}

public class Inner {
public DoThis outer() {
// 使用.this语法,生成外部类对象的引用
return DoThis.this;
}
}

public Inner inner(){
return new Inner();
}

public static void main(String[] args) {
DoThis dt = new DoThis();
Inner inner = dt.inner();
inner.outer().f();
}
}

有时你可能想要告知某些其他对象,去创建某个内部类的对象,你必须在new表达式中提供对外部类对象的引用,这时需要使用.new语法,如下:

public class DotNew {

public class Inner {}

public static void main(String[] args) {
DotNew dotNew = new DotNew();
// 使用.new 语法生成内部类的对象
Inner inner = dotNew.new Inner();
}
}在拥有外部类对象之前是不可能创建内部类对象的。这是因为内部类对象会暗暗地连接到创建到它的外部类对象上。但是,如果你创建的时嵌套类(静态内部类),那么他就不需要对外部类对象的引用。如下:

public class Parcel3 {
// 静态内部类
static class Contents {
private int i = 11;
public int value() {
return i;
}
}

public static void main(String[] args) {
Parcel3.Contents contents = new Parcel3.Contents();
System.out.println(contents.value());
}

}

 

标签:Java,思想,对象,void,编程,class,Inner,new,public
From: https://www.cnblogs.com/LvJinshuai/p/16999607.html

相关文章

  • Java编程思想6
    第十九章:枚举类型关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能。enum的基本特性  我们......
  • JavaScript-DOM基础【获取元素和对其属性/事件的操作】
     文档对象模型(DocumentObjectModel,简称DOM),是W3C组织推荐的处理可扩展标记语言(HTML或者XML)的标准编程接口。W3C已经定义了一系列的DOM接口,通过这些DOM接口可以......
  • Java抽象和封装
    如何从现实生活中抽象出类?从对象中抽出类:1.发现对象的种类2.发现对象的属性(特征)3.发现对象的方法(行为)提示:从对象中抽象出来的类,都可以创建这些对象访问修饰符:p......
  • 教你用JavaScript实现鼠标特效
    案例介绍欢迎来的我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个鼠标爱心特效。鼠标在页面移动时会出现彩色爱心特效。通过实战我......
  • Java类的有参无参方法
    方法的组成:1.修饰符public2.返回值类型void:无返回值3.方法名称驼峰命名myNameshowName()4.方法体{}创建方法的语法:public返回值类型方法名(){......
  • 并发编程:进程+线程+协程
    现代计算机系统是由一个或者多个处理器,主存,磁盘,打印机,键盘,鼠标显示器,网络接口以及各种其他输入输出设备组成的复杂系统,每位程序员不可能掌握所有系统实现的细节,并且管理......
  • 教你用JavaScript实现鼠标特效
    案例介绍欢迎来的我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个鼠标爱心特效。鼠标在页面移动时会出现彩色爱心特效。通过实战......
  • JavaIO流详解
    JavaIO流详解I(Input:输入)/O(Output:输出)流,是java中用来传输数据的方式流(stream)的概念流是一种抽象概念,它代表了数据的无结构化传递流是一个无结构化的数据组......
  • Python|文件处理与数据库编程
    某农带专业Python课实验三txt文件处理题目描述:编程新建一个名为test.txt文件,存放在代码文件所在目录中,并且打开该文件。然后写入如图1-1所示内容到文件中。最后分别读......
  • 《Unix编程艺术》
    1. 不懂Unix的人注定最终还要重复发明一个蹩脚的Unix。2. 以太网的发明者曾经说过:如果将来有什么技术来取代以太网,那么这个取代物的名字还会叫“以太网”,因为以太网是永远......