内部类:在一个类的内部定义其他类的情况。
1) 内部类和外部类的私有属性可以互相访问
内部类要访问外部类的私有属性不需要实例化对象,外部类若要访问内部类的私有属性需要实例化对象。
在内部类中,如果想要表示外部类的当前对象,使用“外部类.this”来表示
2) 在外部实例化内部类对象的操作格式:
外部类.内部类 内部类对象 = new 外部类().new 内部类();
之所以实例化外部类对象是因为内部类需要访问外部类中的普通属性,而普通属性只有在实例化对象之后才可以使用。
3) 使用private定义私有内部类:一个内部类不希望被其他类所使用,可以使用private关键字将其定义为私有内部类。
4) 使用static定义内部类:在定义内部类时也可以使用static关键字,而使用static定义的内部类表示为外部类,且只能访问外部类中的static类型的操作。
若想要实例化用static定义的内部类:
外部类.内部类 内部类对象 = new 外部类.内部类();
5) 在类的普通方法中定义内部类
此时定义的内部类,如果想要访问方法的参数或方法中定义的变量时,这些参数或变量前面一定要增加一个final关键字,否则无法调用。
例1:
public class inerOut {
public static void main(String args[]){
Outer out=new Outer();
out.fun(30);
}
}
class Outer{
private String msg="hello world";
public void fun(int x){
String info="你好";
class Inner{
public void print(){
System.out.println(Outer.this.msg);
System.out.println(x);
System.out.println(info);
}
}
Inner in=new Inner();
in.print();
}
}
在例1中没有在方法的参数和方法内定义的变量之前加final关键字,也可以正常调用,我用的是java1.8.0
Ps:以下是别人的回答
java1.6 1.7都会编译出错.
Java 8的新特性,但其实只是让你方便一点,在你这个内部类里不加final的效果等同于加final
比如,如果你想修改x或info
x = 100
那么会告诉你:
Local variable defined in an enclosing scope must be final or effectively final
注意后面说的effectively final,就是说表面上没有final修饰,但实际上和有final是相同的效果
final关键字
在java中,final关键字表示的是一个终结器的概念,使用final可以定义类、方法、变量。
① 使用final定义的类不能有子类,即无法被别的类继承
② 使用final定义的方法不能被子类覆写
③ 使用final定义的变量就表示常量,常量在定义时必须设置默认值,且无法修改
如果使用public static来定义常量,那么这个常量就称为全局常量
如:public static final String INFO=”hello”;//全局常量