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