内部类
允许一个类在内部中定义另一个类
使用内部类是因为:
内部类可以访问外部类的所有变量,方法 (包括私有的)内部类可以对同一包下的其他类进行隐藏。
内部类
成员内部类
成员式内部类如同外部类的一个普通成员。
成员式内部类可以使用各种修饰符,包括 public、protected、private、static、final 和 abstract,也可以不写。非静态内部类不能声明任何static 成员
public class Test{
public class Demo{
System.out.print("这是一个内部成员内部类");
}
}
内部类的实例化
public class Testdemo{
public static void main( String [] args){
Test test=new Test(); //实例化外部类
Test.Demo demo=demo.new Demo(); //实例化内部类
}
}
静态内部类static 内部类相当于外部类的static 成员 ,不与外部类存在依赖关系 ,可以直接创建
public class Test{
public staticclass demo{
System.out.print("这是一个静态内部类");
}
}
静态内部类的实例化
public class Testdemo{
public static void main( String [] args){
Test.Demo demo=new Test.Demo(); //实例化内部类
}
}
重名时的区分方法
public class Outer{
private int size;
public class Inner{
private int size;
public void dostuff(int size){
size++; // 局部变量 size;
this.size; // 内部类的 size
Outer.this.size++; // 外部类的 size
}
}
}
局部内部类
是定义在代码块中的内部类,只在代码块中可见特性:
仅在定义了它们的代码块中是可见的;可以使用定义它们的代码块中的任何局部 final 变量;局部类不可以是 static 的,里边也不能定义 static 成员;局部类不可以用 public、private、protected 修饰,只能使用缺省的;局部类可以是 abstract 的。
匿名内部类
匿名内部类是局部内部类的一种特殊形式,也就是没有变量名指向这个类的实例,而且具体的类实现会写在这个内部类里面。
注意:匿名类必须继承一个父类或实现一个接口。
abstract class Person {
public abstract void eat();
}
public class Demo {
public static void main(String[] args){// 继承 Person 类new Person() {public void eat() {
System.out.println("eat something");}
}.eat();}
}