内部类
一、 定义:在一个类内部定义的类。
二、 类型:成员内部类、局部内部类(也叫方法内部类)、匿名内部类、静态嵌套类。
三、 用法
a) 四种内部类的共性
i. 内部类仍然是一个独立的类,在编译后内部类会被编译成独立的.class文件,只是在前面加上外部类的类名和$符号。
ii. 内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由访问外部类的成员变量,无论是否是private的。
iii. 内部类的this引用:内部类中同样使用this.成员变量,如要使用外部类的成员变量,则使用外部类名.this.成员变量。
b) 四种内部类的区别
i. 成员内部类:它相当于外部类的一个成员变量或方法,可用修饰符为final、abstract、public、private、protected、strictfp和static。形式如下
class Outer {
class Inner{}
}
编译上述代码会产生两个文件,Outer.class和Outer$Inner.class。成员内部类内不允许有任何静态声明!能够访问成员内部类的途径是通过外部类的对象或外部类中非静态的方法。
//外部类
class Outer {
//内部类
class Inner {
//内部类的方法
public void myInner() {
System.out.println(“Inner class”);
}
}
//非静态方法访问内部类
public void getInner() {
Inner in = new Inner();
in.myInner();
}
//外部访问内部类
pulblic static void main(String args[]) {
Outer out = new Outer();
Outer.Inner in = out.new Inner();
in.myInner();
}
}
ii. 局部内部类(方法内部类):在外部类的某个方法内定义的类,与成员内部类不同,它相当于外部类的一个局部变量,修饰符只有final和abstract。
1. 只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化。
2. 局部内部类对象不能使用该内部类所在方法的非final局部变量。因为方法的局部变量位于栈上,只存在于该方法的生命期内。当一个方法结束,其栈结构被删除,局部变量成为历史。但是该方法结束后,在方法内创建的内部类对象可能仍然存在于堆中!例如,如果对它的引用被传递到其他某些代码,并存储在一个成员变量内。正因为不能保证局部变量的存活期和方法内部类对象的一样长,所以内部类对象只能使用所在方法中被定义为final的局部变量。
3. 静态方法内的局部内部类没有this的引用。
a) 示例:
class Outer {
public void doSomething() {
final int a = 10;
class Inner {
public void myInner() {
System.out.println(a);
}
}
}
}
iii. 匿名内部类:没有名字的内部类。
1. 继承式的匿名内部类
class Car {
public void drive() {
System.out.println(“Driving a car!”);
}
}
class Temp {
public static void main(String[] args) {
Car car = new Car() {
pulbic void drive() {
System.out.println(“Driving another car!”);
}
};
car.drive();
}
}
2. 接口式的匿名内部类
interface Face {
public void drive();
}
class Temp {
public static void main(String[] args) {
Face face = new Face() {
public void drive() {
System.out.println();
}
};
face.drive();
}
}
3. 参数匿名内部类:顾名思义,将匿名内部类当成参数使用。
iv. 静态嵌套类:从技术上讲,静态嵌套类不属于内部类。因为内部类与外部类共享一种特殊关系,更确切地说是对实例的共享关系。而静态嵌套类则没有上述关系。它只是位置在另一个类的内部。因此也被称为顶级嵌套类。静态的含义是该内部类可以像其他静态成员一样,没有外部类对象时,也能够访问它。静态嵌套类不能访问外部类的成员和方法。
class Outer {
static class Inner{}
}
class Temp {
public static void main(String[] args) {
Outer.Inner n = new Outer.Inner();
}
}
分享到:
相关推荐
第09讲 造型、内部类.ppt第09讲 造型、内部类.ppt第09讲 造型、内部类.ppt第09讲 造型、内部类.ppt第09讲 造型、内部类.ppt第09讲 造型、内部类.ppt
第讲-接口与内部类优秀文档.ppt
一般来说,我们创建类和接口的时候都是一个类一个文件,一个接口一个文件,但有时候为了方便或者某些特殊的原因,java并不介意在一个文件中写多个类和多个接口,这就有了我们今天要讲的内部类和内部接口。...
1.成员内部类: (1).定义在类的内部,成员位置上的非静态类 例子: package untl1; public class outer { private static int a = 1; private int b = 2; class inner { public int c=3; pu
资源名称:浙江大学翁凯 Java视频教程【23讲】资源目录:【】01讲【】02讲【】03讲【】04讲【】06讲【】07讲【】08讲【】09讲-抽象类、内部类1【】10讲-抽象类、内部类2【】11讲-Exception1【】12讲【】14讲-IO2【】...
Java内部类的研究及应用这可是老师上课讲得哦 是很不错的东西 虽然自己当时没有认真听
总的来说,这份内部讲义全面地涵盖了Java面向对象编程的关键概念,包括类、对象、继承、封装和多态性,是学习Java程序设计的重要资源。通过理解并掌握这些概念,开发者可以更好地设计和实现复杂的Java应用程序。
本内部讲义“Java2全方位讲议(内部讲议)4”涵盖了Java程序设计的基础知识,包括程序的基本组成元素、变量与数据类型、程序中的标记(Token)、关键字、标识符、字面量(Literal)、符号以及数据类型的转换等核心概念...
JAVA 基础学习 第1讲 Java程序设计概述 第2讲 结构化程序设计 ...第5讲 接口和内部类 第6讲 异常 第7讲 数组 第8讲 集合 第9讲 Java输入和输出系统 第10讲 图形用户界面 第11讲 事件处理 第12讲 Swing用户界面组件
总的来说,企业风险管理与内部控制是一个动态、系统的过程,它涵盖了组织的各个层面,从高层领导的决策到基层员工的执行,都需要有完善的机制来确保企业的稳健运营。通过学习和借鉴不同组织的成功经验,如墨家的严格...
《理学第讲分类和预测》PPT课件主要涵盖了数据分类和预测的基本概念,以及有指导和无指导的学习方法。以下是相关知识点的详细说明: 1. 数据分类:数据分类是一个两步过程。首先,基于训练数据集建立一个模型,这个...
- 重要内部类和接口 - Node 接口 - KeySet 内部类 - Values 内部类 - EntrySet 内部类 - HashMap 1.7 的底层结构 - HashMap 1.8 的底层结构 - HashMap 重要属性 - HashMap 构造函数 - 讲一讲 HashMap put ...
Windows之父Jim Allchin曾经说过不要满足于只知道How-to、小技巧之类的知识,而是应该深入底层了解其内部原理。只有了解了这些安全特性的内在原理,才能真正了解Windows Vista是怎样精心替我们解决安全问题的,才能...
本教学资源"14讲类和对象"深入浅出地介绍了这些概念,帮助初学者理解并掌握如何在C++中有效地使用它们。 1. **类的概念**:类是面向对象编程的基础构造单元,它是一种自定义的数据类型,可以封装数据(成员变量)和...
内部类分为成员内部类、局部内部类、匿名内部类和静态内部类四种类型,每种都有其特定的使用场景。 3. **异常处理**: - 异常处理是Java程序健壮性的重要保障。Java使用try-catch-finally语句块来捕获和处理运行时...
【企业内部控制审计监管相关问题】 内部控制是企业管理的重要组成部分,它涉及到企业运营的多个层面,包括组织结构、人力资源、风险管理、信息系统以及财务报告等。企业内部控制的目的是为了保证业务的正常运行,...
在Java中,通过访问修饰符(如`public`、`private`、`protected`)实现封装,保护类的内部数据不被外部随意访问。例如,如果一个类有一个私有属性`year`,我们可以通过提供公共的getter和setter方法来控制外部对`...
总的来说,二进制类RPC协议在数据中心内部服务间的高频率调用中具有显著优势,其高效的数据编码和传输减少了网络资源的消耗,提升了系统性能。Dubbo等实现方式为这种通信模式提供了可靠的实现框架,是现代分布式系统...
在第十讲“类规格及其测试考虑”中,重点讲述了如何定义和利用数据抽象来构建类的规格,以及如何进行基于规格的测试。 数据抽象规格是类型的一种抽象,由数据内容和操作两部分构成。数据内容定义了对象的状态空间,...
在本节"VS2010轻松学习C#-从零到深入-天轰穿.NET4趣味编程视频教程_第12讲:封装与类成员"中,天轰穿老师将引导我们深入理解C#编程中的核心概念——封装以及类成员的使用。封装是面向对象编程的一个关键特性,它有助...