- 浏览: 79189 次
- 性别:
- 来自: 沈阳
文章分类
最新评论
-
zzw118:
楼主讲解得很好,学习了!
hibernate延迟加载 -
fengwei199181:
不错。
hibernate延迟加载 -
teacher1998:
写得挺全的,格式也蛮好,thanks
Cookie与Session专题 -
wfl888_2007:
谢谢!~ 又回顾了下基础! 看来要经常逛逛! 不然都忘了! ...
CoreJava学习笔记5 -
whaosoft:
基础挺重要的 没事就该看下呢
CoreJava学习笔记5
7.11. 内部类
(注:所有使用内部类的地方都可以不用内部类,但使用内部类可以使程序更加的简洁,便于命名规范和划分层次结构)。
内部类是指在一个外部类的内部再定义一个类。
*内部类可为静态,可用PROTECTED和PRIVATE修饰。(而外部类不可以:顶级类只能使用PUBLIC和DEFAULT)。
*JAVA文件中没有publie class 可以类名和文件不同名。
7.11.1. 内部类的分类
成员内部类、
局部内部类、
静态内部类、
匿名内部类(图形是要用到,必须掌握)。
7.11.2. 成员内部类
作为外部类的一个成员存在,与外部类的属性、方法并列。
内部类和外部类的实例变量可以共存。
在内部类中访问实例变量:this.属性
在内部类访问外部类的实例变量:外部类名.this.属性。
在外部类的外部访问内部类,使用out.inner.
成员内部类的特点:
1.内部类作为外部类的成员,可以访问外部类的私有成员或属性。(即使将外部类声明为PRIVATE,但是对于处于其内部的内部类还是可见的。)
2.用内部类定义在外部类中不可访问的属性。这样就在外部类中实现了比外部类的private还要小的访问权限。
注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。
对于一个名为outer的外部类和其内部定义的名为inner的内部类。编译完成后出现outer.class和outer$inner.class两类。
3.成员内部类不能有静态属性
建立内部类对象时应注意:
在外部类的内部可以直接使用inner s=new inner();(因为外部类知道inner是哪个类,所以可以生成对象。)
而在外部类的外部,要生成(new)一个内部类对象,需要首先建立一个外部类对象(外部类可用),然后在生成一个内部类对象。
Outer o=new Outer();
Outer.Inner in=o.new.Inner()。
//成员内部类......相当于非静态方法
class Outer {
private int a = 3;
public class Inner {
private int a = 2;
public void doSomething() {
// 调用外部类的属性
System.out.println(Outer.this.a);// 这块要注意......很重要!!!
System.out.println(a);
}
}
}
public class Test {
public static void main(String[] args) {
Outer.Inner inner = new Outer().new Inner();// 非静态内部类要new实例
inner.doSomething();
}
}
7.11.3. 局部内部类
在方法中定义的内部类称为局部内部类。
与局部变量类似,在局部内部类前不加修饰符public和private,其范围为定义它的代码块。
注意:
局部内部类不仅可以访问外部类实例变量,但可以访问外部类的局部常量
在类外不可直接访问局部内部类(保证局部内部类对外是不可见的)。
在方法中才能调用其局部内部类。
//局部内部类......相当于局部变量 class LocalInner { public void doSomething(int b) { final int a = 3;// 只能访问final的变量 class Inner3 { public void test(int b) { System.out.println(b); System.out.println(a); } } new Inner3().test(b); } } public class Test4 { public static void main(String[] args) { LocalInner inner = new LocalInner(); inner.doSomething(4); } }
7.11.4. 静态内部类
(注意:前三种内部类与变量类似,所以可以对照参考变量)
静态内部类定义在类中,任何方法外,用static定义。
静态内部类只能访问外部类的静态成员。
生成(new)一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:
Outer.Inner in=new Outer.Inner();
而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类。静态内部类不可用private来进行定义。
//静态内部类......相当于静态方法
class StaticInner{
private static int a=3;
public static class Inner{
public void test(){
System.out.println(a);
}
}
}
public class Test2 {
public static void main(String[] args) {
StaticInner.Inner inner=new StaticInner.Inner();//静态内部类直接调用
inner.test();
}
}
注意:当类与接口(或者是接口与接口)发生方法命名冲突的时候,此时必须使用内部类来实现。
用接口不能完全地实现多继承,用接口配合内部类才能实现真正的多继承。
例子:
对于两个类,拥有相同的方法:
class People
{
run();
}
interface Machine{
run();
}
此时有一个robot类:
class Robot extends People implement Machine.
此时run()不可直接实现。
interface Machine
{
void run();
}
class Person
{
void run(){System.out.println("run");}
}
class Robot extends Person
{
private class MachineHeart implements Machine
{
public void run(){System.out.println("heart run");}
}
public void run(){System.out.println("Robot run");}
Machine getMachine(){return new MachineHeart();}
}
class Test
{
public static void main(String[] args)
{
Robot robot=new Robot();
Machine m=robot.getMachine();
m.run();
robot.run();
}
}
7.11.5. 匿名内部类
匿名内部类是一种特殊的局部内部类,它是通过匿名类实现接口。
IA被定义为接口。
IA I=new IA(){};
注:一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类,没有类名,根据多态,我们使用其父类名。
因其为局部内部类,那么局部内部类的所有限制都对其生效。
匿名内部类是唯一一种无构造方法类。
匿名内部类在编译的时候由系统自动起名Out$1.class。
如果一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。
因匿名内部类无构造方法,所以其使用范围非常的有限。
发表评论
-
在myeclipse下给代码加注释
2010-10-26 14:16 2025给类加注释: 方法一 ... -
Cookie与Session专题
2010-09-30 21:52 923Cookie与Session专题一、coo ... -
Java与中文的问题:char变量可以存中文;中文类名,变量名,方法名
2010-09-29 17:06 1236char容量为16bit,可以存中文 public ... -
如何使用Java解析XML
2010-09-23 00:09 1727XML_day01_pm 1.XML可宽展编辑语言 指令: ... -
JDBC课程笔记
2010-09-23 00:02 1065JDBC_day01_am 1. 2.解耦合 ... -
JDBC中Statement和PreparedStatement的区别
2010-09-22 23:59 963Statement:创建时不传递sql语句;每传入数据库一条s ... -
CoreJava学习心得17
2010-05-01 20:40 851JAVA5.0 的注释 (Annotation) ... -
CoreJava学习心得16
2010-05-01 20:35 933Java5.0的新特性 自动装 ... -
CoreJava学习心得15
2010-05-01 20:30 721反射 反射,在运行时 ... -
CoreJava学习心得14
2010-05-01 20:28 930ObjectInputStream和ObjectOutputS ... -
CoreJava学习心得13
2010-05-01 20:24 8601Java中的I/O 使用I/O流访问file中的内容。 J ... -
CoreJava学习笔记12
2010-05-01 20:23 927死锁问题 多线程不释 ... -
CoreJava学习笔记11
2010-05-01 20:20 719Java多线程编程 进程,即运行中的程序,多任务操作系统中并 ... -
CoreJava学习笔记10
2010-05-01 20:16 705awt事件模型(观察者模式)(重点) 事件模型中,包括事件源 ... -
CoreJava学习笔记9
2010-04-27 22:19 891java中的图形界面 GUI,图形化的用户接口,为了人机交互 ... -
CoreJava学习笔记8
2010-04-27 22:18 909[size=medium] ... -
CoreJava学习笔记7
2010-04-27 22:07 856很重要的一章哦 Java封 ... -
CoreJava学习笔记6
2010-04-26 22:27 971java中的接口 接口是一种程序结构,是特殊的抽象类。接口中 ... -
CoreJava学习笔记5
2010-04-26 22:21 974java中的修饰符 static 表示静态,它可以修饰属性, ... -
CoreJava学习笔记4
2010-04-25 18:43 1088面向对象的三大特征:封装、继承、多态 Java中的封装 封 ...
相关推荐
内部类分类
成员内部类、局部内部类、静态内部类、匿名内部类
Java语言中的内部类根据定义的位置和访问权限可以分为四类:成员内部类、局部内部类、匿名内部类和静态内部类。成员内部类是定义在类的内部且与类的实例相关联的类;...以上是对内部类的简要分类和认识。
java内部类总结,内部类的共同特征,内部类的分类等
在java语言中,有一种类叫做内部类(inner class),也称为嵌入类(nested class),它是定义在其他类的内部。
java中内部类的分类及用法.pdf
day11_07_内部类的概念与分类
Task的内部类和辅助类的Hadoop源代码分析
基于此模型,对岩溶陷落柱按照内部结构的不同进行了分类,将岩溶陷落柱分为堆石型、堆石裂隙型、堆石泥石浆型等8种不同类型,并总结分析了不同类型岩溶陷落柱的结构特征和突水特征,且对不同类型岩溶陷落柱煤矿采掘工程...
第6章 内部分类数据结构与算法计算机科学与技术学院(2021春)数据结构与算法第六部分 排序第6章 内部分类数据结构与算法计算机科学与技术学院(2021春)一、
规范内容主要包括:对公司数据进行分类,并在此基础上根据对外开放及敏感程度进行分级,制订了不同级别的敏感数据在对外开放和内部管理中应遵循的管控实施要求,并给出了原始数据的标签化和模糊化示例,总结了用户...
最新企业内部培训课程分类.pptx
建筑内部排水系统的分类.pdf
计算机后端-Java-Java核心基础-第15章 面向对象07 24. 内部类的分类.avi
资料组成:1.半导体封装分类;2.产品外观照片;3.产品内部封装图。包括PDIP、SOIC/SOJ、SOT/SC、SOP/SSOP、TSOP(I)、TSOP(II)、PLCC、QFP、LQFP、TQFP、HQFP、PBGA、HSBGA……很好很强大!
使用场景及目标:系统可用于各种垃圾分类网站,如城市公共服务网站、社区网站和企业内部网站等。它旨在为用户提供良好的使用体验和易于管理的内容发布工具。 其他说明:系统源码包含了全套的代码、文档和演示数据,...
证券代码 证券代码-字符串 年份 证券简称(补全) 证监会2012行业大类分类码-每年更新 证监会2012行业大类分类码-每年更新 行业大类代码是否变更 证监会2012行业门类分类码-每年更新 证监会2012行业门类分类码-每年...
针对传统的分类算法在处理不均衡样本数据时,其分类器预测倾向于多数类,少数类分类误差大,提出了一种基于聚类和遗传算法的样本生成方法。先通过K-means算法将少数类样本聚类分组;再在每个聚类的内部使用遗传交叉...