内部类
一、 定义:在一个类内部定义的类。
二、 类型:成员内部类、局部内部类(也叫方法内部类)、匿名内部类、静态嵌套类。
三、 用法
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
Java中的接口和内部类是两种高级的面向对象编程特性,它们极大地增强了代码的灵活性和可扩展性。在Java中,接口扮演着契约的角色,它定义了一组方法的签名,但不提供具体的实现。这意味着任何实现了接口的类都必须...
一般来说,我们创建类和接口的时候都是一个类一个文件,一个接口一个文件,但有时候为了方便或者某些特殊的原因,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应用程序。
本内部讲义“Java2全方位讲议(内部讲议)4”涵盖了Java程序设计的基础知识,包括程序的基本组成元素、变量与数据类型、程序中的标记(Token)、关键字、标识符、字面量(Literal)、符号以及数据类型的转换等核心概念...
JAVA 基础学习 第1讲 Java程序设计概述 第2讲 结构化程序设计 ...第5讲 接口和内部类 第6讲 异常 第7讲 数组 第8讲 集合 第9讲 Java输入和输出系统 第10讲 图形用户界面 第11讲 事件处理 第12讲 Swing用户界面组件
《单位内部控制规范》是针对行政事业单位管理的一项重要指导文件,旨在强化单位的内部管理,防止腐败,提升公共服务效率。这份规范的制定有多重背景和依据,包括政府对廉洁高效服务型政府的建设需求,事业单位分类...
内部控制缺陷分为两类: 1. 计划缺陷:指的是企业缺乏实现控制目标所必需的控制措施,或者已有的控制设计不合理,即使正常运行也无法达到预期效果。例如,企业可能没有设立足够的审批流程来防止欺诈行为。 2. 运行...
本讲主要探讨了这一概念以及在安徽省农村合作金融机构实施中存在的问题。 首先,五级分类包括正常、关注、次级、可疑和损失五个级别,对应不同程度的风险程度。正常类贷款代表借款人偿债能力较强,后三类则逐渐表示...
总的来说,行政事业单位的内部审计是一个系统化、规范化的过程,涵盖了从计划制定、实施到结果评估的各个环节,旨在促进单位的健康发展和提高公共服务的质量。通过严谨的审计方法和技术,可以有效发现和纠正潜在的...
总的来说,企业风险管理与内部控制是一个动态、系统的过程,它涵盖了组织的各个层面,从高层领导的决策到基层员工的执行,都需要有完善的机制来确保企业的稳健运营。通过学习和借鉴不同组织的成功经验,如墨家的严格...
《理学第讲分类和预测》PPT课件主要涵盖了数据分类和预测的基本概念,以及有指导和无指导的学习方法。以下是相关知识点的详细说明: 1. 数据分类:数据分类是一个两步过程。首先,基于训练数据集建立一个模型,这个...
2. **父子类间的转型**:转型只存在于具有继承关系的类之间。你可以将子类对象转换为父类对象(向上转型),这是自动完成的;也可以将父类对象转换为子类对象(向下转型),但需要使用强制转换操作符 `(子类类型)`。...
封装是面向对象的基础,它隐藏了对象内部的实现细节,只暴露必要的接口供外部使用。这样可以保护数据不被非法访问,提高程序的安全性。 多态是指同一种操作可以作用于不同类型的对象上,产生不同的效果。在Java中,...
比如问题3,选择服装参加演出,可以分为两类:一类是衬衫配裙子,另一类是连衣裙,每类内部又有多种选择,根据分类加法计数原理,将两类方法数相加;而每类内部的选择数则是通过分步乘法计数原理计算的。 问题4中,...
Windows之父Jim Allchin曾经说过不要满足于只知道How-to、小技巧之类的知识,而是应该深入底层了解其内部原理。只有了解了这些安全特性的内在原理,才能真正了解Windows Vista是怎样精心替我们解决安全问题的,才能...
类的成员函数可以定义在类体内部或类体外部。在类体内部定义的函数称为内置成员函数,通常用于实现一些简单的操作,可以省略关键字inline,由编译器自动判断。在类体外部定义成员函数时,需要使用类名和作用域运算符...
本教学资源"14讲类和对象"深入浅出地介绍了这些概念,帮助初学者理解并掌握如何在C++中有效地使用它们。 1. **类的概念**:类是面向对象编程的基础构造单元,它是一种自定义的数据类型,可以封装数据(成员变量)和...