内部类就是定义在另一个类内部的类。
内部类对于同一包中的其它类来说,内部类能够隐藏起来。
语法:
public class MyOut {
private int age;
public void show(){}
class MyInner{
private int name;
}
}
(1)内部类可以访问其外部类中所有的属性和方法,无需创建外部类的对象。
(2)必须创建内部类的对象,否则无法从外部类访问内部类的变量和方法。
(3)如果内部类中有和外部类同名的变量或方法,则内部类的变量和方法将获得比外部类的变量和方法更高的优先级。
(4)不能定义static变量
一个类只会被这个类所调用,其他类不会使用他,你可以把它定义成一内部类,这样可以隐藏实现细节,避免错误的调用:
public class Outer{
private int varOuter=100;
class Inner {
int varInner=200;
public void showOuter() {
//是否能够输出?
System.out.println(varOuter);
}
}
public void showInner() {
Inner i=new Inner();
System.out.println(i.varInner);
}
}
public class MyTest{
public static void main(String[] args){
//实例化外部类
Outer o = new Outer();
//实例化内部类
Outer.Inner oi = o.new Inner(); 将内部类进行实例化
oi.showOuter();
}
}
输出:100
普通类的访问权限修饰符:default public
内部类的访问权限修饰符
default public protected private
静态内部类:用static标识的内部类为静态内部类。
(1)静态内部类作为外部类的静态成员,不能访问外部类非静态成员。
(2)非静态内部类只能定义非静态成员,而静态内部类可以定义静态成员和非静态成员。
静态内部类实例化的方法:
使用Outer.Inner inn=new Outer.Inner()方式实例化静态内部类。
非静态内部类不可以使用上面的方式实例化。
public class MyOut {
private int age;
public void show();
static class MyInner{
private int name;
}
}
局部内部类:在一个类的方法体中或程序块内定义的内部类
class A{
int a;
public void method(){
}
class B{ }
}
class A{
int a;
public void method( int c ){
int b=0;
class B{ }
}
}
在方法定义的内部类中只能访问方法中的final类型的局部变量
public class Outer2 {
public int a = 1;
private int b = 2;
public void method( final int c) {
int d = 3;
final int e = 2;
class Inner {
private void iMethod( int e) {
//System.out.println(e);
}
}
}
}
匿名内部类:没有定义类名的内部类,称为匿名内部类
aaa
?????????