一些基础知识点慢慢掌握理解,以前还是很菜的。
首先抛出一个命题,一个类文件中可以有多个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也对。
很基础的东西,如果有哪里不对,还请各位指正
新闻热点
疑难解答