黑马程序源——java基础——嵌套类和内部类
来源:互联网 发布:库里16赛季数据 编辑:程序博客网 时间:2024/05/23 17:13
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
嵌套类的概述:
嵌套类是一个在另一个类或者接口内部声明的类,嵌套类有两种嵌套类型:
1:静态内部类
2:非静态嵌套类,非静态嵌套类也称内部类,内部类的几种类型:
1:成员内部类
2:本地内部类
3:匿名内部类
嵌套类的行为表现类似于一个普通的类,嵌套类可以扩展为另一个类,实现接口,变成子类的父类等,下面是一个简单的嵌套类为例
piblic class outer{
class Nested{
}
}
还有就是在一个嵌套类中还可以有另一个嵌套类,这种不是很常见像这样:
public class S1{
class S2(
class S3{
}
)
}
对于顶层类而言,嵌套类也其他类成员无异,比如嵌套类与类成员一样也可以由这写修饰符,public,protected,private,default。
由于嵌套类是外部类的成员所以所以静态嵌套类 行为与内部类的行为不完全相同,下面是他们的区别:
1:静态嵌套类可以有静态成员,内部类则不行
2:像实例方法一样,内部类可以访问外层类的静态成员和非静态成员,包括pravate成员,静态嵌套类则只能访问外层类的静态成员
3:不需要先创建其外层类的实例就可以直接创建静态嵌套类实例,相反,将内部类本身实例话之前,必须先创建一个包装内部类的外层实例。
内部类的有点有:
1:内部类可以访问外层类的所有成员(包括pravate)
2:内部类有助于完全一个类的实现
3:内部类提供了一种在Swing和其他基于事件的应用程序中编写监听器的快捷方式:
代码演示,一个静态的嵌套类:
<span style="font-size:18px;">package com.itheima;class Text11 {private static int value=9;static class Nested1{int calculate(){return value;}}}class StaticNested1 {public static void main(String[] args) {Text11.Nested1 nested=new Text11.Nested1();System.out.println(nested.calculate());}}</span>
关于静态嵌套类,几点应该注意的是:
1:引用嵌套类的格式
2:实例化静态的嵌套类时,不需要创建外层类实例
3:必须从静态嵌套类内部方位外层类的静态成员
成员内部类概述:
成员内部类是指其定义一个直接被另一个类或者 接口的声明包装类。只是当引用七外层类的实例时才会创建成员内部类实例,为了从外层类内部创建内部类实例,可以调用内部类的构造器,就像调用其他普通的类一样。但是,如果想从外层类的外部创建内部类的实例则必须使用一下语法
EnclostingClassName.InnerClassName inner=enclosingClassObjectReference.new InnerClassName();
像往常一样,从内部类,可以利用关键字this引用当前实例。要引用外层类的实例得利用这个语法:
EnclosingClassName.this
成员内部类代码演示:
<span style="font-size:18px;">package com.itheima;class TopLevel{private int value=9;class Inner{int calculate(){return value;}}}public class text12 {public static void main(String[] args) {TopLevel toplevel=new TopLevel();TopLevel.Inner inner=toplevel.new Inner();System.out.println(inner.calculate());}}</span>
注意:
成员内部类可以完全隐藏一个实现,有些事情不采用内部内是无法完成的。
局部内部类的概述
局部内部类简称局部类,从定义上来讲他不属于任何类的成员类,局部类有名称与没有名称的匿名类相反,局部类可以在任何代码快中进行声明,他的作用是在这个代码块之内,例如我们可以在一个方法中,一个if()中,一个while()中声明局部类。
下面是局部类代码演示:
<span style="font-size:18px;">import java.util.Date;interface Logger{public void log(String str);}public class Test13 {String appStartTime=(new Date()).toString();public Logger getLogger(){class LoggerImpl implements Logger{public void log(String message){System.out.println(appStartTime+":"+message);}}return new LoggerImpl();}public static void main(String[] args) {Test13 test=new Test13();Logger logger=test.getLogger();logger.log("local class example");}}</span>
注意:
有一个LoggerImpl的局部类,他出在一个方法的内部该方法必须返回Ligger接口的一个实现,并且这个实现不可以在其他 对方使用
匿名内部类的概述
匿名内部类根据定义可知就是没有名字,使用这种嵌套类是为了编写接口的实现
小结:
嵌套类是指在另一个类中声明的类,他有四种类型:
1:静态嵌套类
2:成员内部类
3:局部内部类
4:匿名内部类
使用嵌套类的好处是,完全隐藏一个类的实现,以及可以快速的编写一个其实例只存在于某一个上下文中的类。
- 黑马程序源——java基础——嵌套类和内部类
- 黑马程序猿——JAVA基础------内部类
- 黑马程序员—java基础学习--Object类,内部类
- 黑马程序员——Java基础——内部类
- 黑马程序员——Java基础——内部类
- 黑马程序员——JAVA基础---匿名内部类
- 黑马程序员——Java基础---内部类与异常
- 黑马程序员——Java基础--内部类
- 黑马程序员——Java基础---内部类
- 黑马程序员——java基础 内部类
- 黑马程序员——Java基础:内部类、异常、包
- 黑马程序员——Java基础--多态、内部类、异常
- 黑马程序员——Java基础--内部类总结
- 黑马程序员——Java基础---多态、内部类、
- 黑马程序员—java基础—内部类
- 黑马程序员——Java语言基础:多态、内部类
- 黑马程序员——Java基础---多态,内部类,异常
- 黑马程序员——Java基础--------内部类
- iOS时间轴的实现
- C++中宽字符类型(wchar_t)的编码一定是Unicode?
- 2015年1月9日《linux程序设计》笔记
- 2014年终总结
- jpgraph 实例文档
- 黑马程序源——java基础——嵌套类和内部类
- loadrunner必用函数web_reg_save_param获取多个符合边界值条件的使用方法
- HDU 3911 Black And White(线段树区间合并)
- 软件设计模式之工厂模式(jAVA)
- eclipse配置maven老的资源库没法使用问题
- sgu187:Twist and whirl -- want to cheat(splay+区间翻转)
- 大话NodeJS之------Http模块
- SDUT14级队员训练1 D - Periodic Strings
- CSS-浮动篇float