1,已经将一个类的定义放在另一个类的定义内部,这就是内部类。
2,内部类可以访问其外围类的方法和字段。
3,.this和.new
如果你需要生成对外部类对象的引用,可以使用外部类的名字后面紧跟圆点和this。
public class DotThis {
void f() { System.out.println("DotThis.f()"); }
public class Inner {
public DotThis outer() {
return DotThis.this;
// A plain "this" would be Inner's "this"
}
}
public Inner inner() { return new Inner(); }
public static void main(String[] args) {
DotThis dt = new DotThis();
DotThis.Inner dti = dt.inner();
dti.outer().f();
}
} /* Output:
有时要告知某些其他对象,去创建某个内部类的对象。你必须在new表达式中提供对其他外部类对象的引用。这是需要使
用.new语法。
public class DotNew {
public class Inner {}
public static void main(String[] args) {
DotNew dn = new DotNew();
DotNew.Inner dni = dn.new Inner();
}
} ///:~
4,在方法和作用域内的内部类
可以在一个方法里面或者任意的作用域内定义内部类。有以下的理由:
1,你实现了某类型的接口,于是可以创建并返回对其的引用;
2,你需要解决一个复杂的问题,想创建一类来辅助你的解决方案,但是又不希望这个类是公共可用的。
public class Parcel5 {
public Destination destination(String s) {
class PDestination implements Destination {
private String label;
private PDestination(String whereTo) {
label = whereTo;
}
public String readLabel() { return label; }
}
return new PDestination(s);
}
public static void main(String[] args) {
Parcel5 p = new Parcel5();
Destination d = p.destination("Tasmania");
}
} ///:~
5,匿名内部类
public class Parcel7 {
public Contents contents() {
return new Contents() { // Insert a class definition
private int i = 11;
public int value() { return i; }
}; // Semicolon required in this case
}
public static void main(String[] args) {
Parcel7 p = new Parcel7();
Contents c = p.contents();
}
} ///:~
contents()方法将返回值的生成与表示这个返回值的类的定义结合在一起,这个类是匿名的,没有名字的。
6,嵌套类
如果不需要内部类对象与其外围类对象之间有联系,那么可以将内部类声明为static,这通常叫嵌套类
public class Parcel11 {
private static class ParcelContents implements Contents {
private int i = 11;
public int value() { return i; }
}
protected static class ParcelDestination
implements Destination {
private String label;
private ParcelDestination(String whereTo) {
label = whereTo;
}
public String readLabel() { return label; }
// Nested classes can contain other static elements:
public static void f() {}
static int x = 10;
static class AnotherLevel {
public static void f() {}
static int x = 10;
}
}
public static Destination destination(String s) {
return new ParcelDestination(s);
}
public static Contents contents() {
return new ParcelContents();
}
public static void main(String[] args) {
Contents c = contents();
Destination d = destination("Tasmania");
}
} ///:~
7,接口内部的类
正常情况下,不能在接口内部放置任何代码,但是嵌套类可以作为接口的一部分。你放到接口中的任何类都自动地是public
和static。
public interface ClassInInterface {
void howdy();
class Test implements ClassInInterface {
public void howdy() {
System.out.println("Howdy!");
}
public static void main(String[] args) {
new Test().howdy();
}
}
} /* Output:
8,为什么需要内部类
为了解决多重继承问题
interface A {}
interface B {}
class X implements A, B {}
class Y implements A {
B makeB() {
// Anonymous inner class:
return new B() {};
}
}
public class MultiInterfaces {
static void takesA(A a) {}
static void takesB(B b) {}
public static void main(String[] args) {
X x = new X();
Y y = new Y();
takesA(x);
takesA(y);
takesB(x);
takesB(y.makeB());
}
} ///:~
分享到:
相关推荐
运算符还包括移位运算,如<<(左移)、>>(带符号位右移)和>>>(无符号右移)。移位运算需要注意符号位的处理,以及移位数量的模运算。 四、运算符和类型转换 运算符包括算术运算符、关系运算符、逻辑运算符等。在...
本压缩包中包含的"Example"文件夹,极有可能是《JAVA学习笔记》一书中的实例源代码,旨在帮助读者深入理解书中讲解的Java编程原理和实践技巧。下面我们将对这些源代码进行详细解读,以便更好地掌握Java编程。 1. **...
Java是一种面相对象的编程语言。计算机语言分成两种,第一种是面向机器结构的语言,构建数据模型是基于机器的结构。第二种是面向待解决问题结构的语言,构建数据模型是基于问题的结构。Java提供了更丰富的工具来描述...
JAVA学习笔记是面向对象编程语言的学习笔记,涵盖了JAVA的基本概念、面向对象编程思想、类和对象的概念、实例变量和局部变量的区别、方法的定义和调用、类型转换、精度问题、移位问题、switch语句的使用等内容。...
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...
在讨论Java编程思想学习笔记时,首先需要了解的是Java语言的平台无关性,而这一特性正是通过Java虚拟机(JVM)得以实现的。JVM作为Java程序设计的关键组成部分,对于Java开发人员来说是必须掌握的基础知识。在该学习...
前言:<br>为了学习java方便,特整理成txt,这样上下班的一个多小时路程就可以充分利用了。<br>此份所有内容皆出自我的偶像:林信良(良葛格)的Java 学习笔记,网址:<br>...
《Java编程思想》是 Bruce Eckel 的经典著作,这本书深入浅出地讲解了Java语言的核心概念和编程技术。这份读书笔记记录了读者在研读此书过程中的理解和体会,涵盖了从基础语法到高级特性的全面解析。以下是笔记中...
1 应用Struts的网站建设 <br><br> <br> <br>Java基础<br> 1 20个Java基础Tips <br> 2 abstract,static,final修饰符 <br> 3 ChinaUnix.net Java精华贴 <br> 4 ANT学习笔记 <br> 5 极度性能调整 <br><br> <br>FAQs<br>...
java编程思想笔记,建议与书本结合使用。。。。。。。。。。。
本笔记涵盖了Java编程思想的多个方面,包括访问权限控制、封装、继承、多态、接口、内部类、持有对象等。 访问权限控制 访问权限控制是为了把变动的事物与保持不变的事物区分开来。Java中有四种访问权限修饰词:...
java编程思想的笔记。是别人的学习笔记。
### Java编程思想笔记 #### 重要知识点概览 在深入探讨《Java编程思想笔记》时,我们可以提炼出一系列核心概念和技巧...以上知识点仅为《Java编程思想笔记》中的冰山一角,深入学习和实践是掌握Java编程精髓的关键。
Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。...Java学习笔记涵盖了这些核心知识点,通过深入学习和实践,你可以逐步掌握Java编程,并应用于实际项目开发中。
这本"Java并发编程学习笔记"可能是作者在深入研究Java并发特性、工具和最佳实践过程中积累的心得体会。下面,我们将根据这个主题,探讨一些关键的Java并发编程知识点。 1. **线程与进程**:在多任务环境中,线程是...
泛型是Java编程语言中的一个重要特性,首次在JDK 1.5版本中引入,它允许程序员在定义类、接口和方法时使用类型参数,从而实现了类型的安全性和代码的复用性。泛型的主要目标是增强类型安全,避免在运行时出现...
### Java框架学习笔记 #### 第一章:框架技术概述 - **SSH框架组合**:SSH是Struts + Spring + Hibernate的简称,这三个框架在Java Web应用开发中非常常见,它们各自解决了不同的问题,并且能够很好地协同工作。 ...