黑马程序源——java基础——嵌套类和内部类

------<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:匿名内部类

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值