首页 > 编程 > Java > 正文

java中内部类的学习再学习

2019-11-06 06:06:13
字体:
来源:转载
供稿:网友

一些基础知识点慢慢掌握理解,以前还是很菜的。

首先抛出一个命题,一个类文件中可以有多个public 修饰的类么?可以

答案就是用public修饰成员内部类。

java有4种内部类:

首先四种内部类有共同的性质:

1、都是独立的类,在编译后都会产生.class文件,内部类以“外部类$内部类.class”文件和外部类在同一文件夹下面。

2、内部类(静态内部类有区别)可以访问外部类的任何属性和方法,无论是否是PRivate的

1、静态内部类;

public class OuterClass {	static class innerClass{}  }①:静态内部类它可以不依赖于外部类实例而被实例化,而通常内部类需要在外部类实例化之后才能被实例化。

②:静态内部类不能与外部类有相同的名字,不能访问外部类的普通成员变量,只能访问外部类中静态成员和静态方法(包括private的)

2、成员内部类;

public class OuterClass {	class innerClass{}  }①:它可以自由的应用外部类的属性和方法,无论这些是静态还是非静态的。

②:但是不能定义静态的方法或者属性,应为他和一个实例绑定在一起了。

③:只有外部类被实例化后,这个类才能被实例化。

3、局部内部类;

public class OuterClass {	public void menberFunction(){		class InnerClass{}	}}①:局部内部类和局部变量一样,不能被public、protected、private、以及static修饰。

②:只能访问方法中定义为final类型的局部变量。

4、匿名内部类;

public class OuterClass extends Frame{	public OuterClass(){		addWindowListener(new WindowAdapter() {			//匿名内部类		});	}}①:是一种没有类名的内部类,代码很简介,紧凑,一般用于GUI编程中事先事件处理

最后借用一道题来加深理解:

有如下代码:

public class OuterClass {	public void method(){		//Line3	}	public class Inner{}	public static void main(String[] args){		OuterClass oc = new OuterClass()		//Line8	}}一下哪几项是正确的?

A:new Inner();    //line3

B:new Inner();    //line8

C:new Outer.Inner();    //line 8

D:new o.Inner();   //line8

答案是A;

非静态的内部类初始化必须要依赖于外部类,而a中,能够调用method方法,外部类肯定已经初始化了,所以能够直接new inner()。

如果line8中填:oc.new Inner(); 则可以通过,借助外部类,从而实例化内部类。

如果内部类inner声明为static的,则b也对。   

很基础的东西,如果有哪里不对,还请各位指正


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表