黑马程序源——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:匿名内部类

使用嵌套类的好处是,完全隐藏一个类的实现,以及可以快速的编写一个其实例只存在于某一个上下文中的类。

0 0