成员内部类声明在类中,方法体、代码块之外。和成员变量、成员方法在同一级别。
语法:public class Out {
//成员内部类
public class Inner{
}
}
实例化成员内部类:
//先实例化外部类
Out o = new Out();
//使用外部类对象,再实例化内部
Out.Inner inner = o.new Inner();
实例:
public class Out {
//成员变量
public int a = 1;
//成员内部类
public class Inner{
public int a = 2;
//内部类的成员方法
public void print(){
//执行内部类中的实例变量a
System.out.println(a);
//执行外部类的实例变量a
System.out.println(Out.this.a);
}
}
}
静态内部类
声明的位置参考成员内部类。
语法:public class Out {
//静态内部类
public static class Inner{
}
}
实例化静态内部的对象:
Out.Inner inner = new Out.Inner();
实例:
public class Out {
public static int a = 1;
public int b = 3;
//静态内部类
public static class Inner{
public static int a = 2;
public static void print(){
//执行静态内部的静态变量
System.out.println(a);
//执行外部类的静态变量
System.out.println(Out.a);
//执行外部类的实例变量
Out o = new Out();
System.out.println(o.b);
}
}
}
局部内部类
声明在方法体或代码块内,作用域范围在方法体或代码块内。
语法:public class Out {
public void method(){
//局部内部类
class Inner{
//局部内部类的成员方法
public void print(){
System.out.println("局部内部类");
}
}
//实例化局部内部类
Inner inner = new Inner();
inner.print();
}
}
执行局部内部类的方法:
Test类:
public static void main(String[] args) {
Out o = new Out();
o.method();
}
匿名内部类
声明位置同局部内部类一样,前提条件:必须继承一个类或实现一个接口,匿名内部类的声明和实例化对象是同时进行的;
一般使用于获得抽象类或接口对象;
语法:父类名/接口名 对象名 = new 父类名/接口名(){
//匿名内部类成员
};
实例:
父类
public class Father {
}
匿名内部类:
public class Out {
public void method(){
//匿名内部类对象
Father f = new Father(){
};
}
}
此篇完
这一篇对新手是不友好的,不过对一些一知半解的或者想复习的朋友可能帮助更大。