内部 类 内部 类有二种:成员式的(像外部类的属性)和区域式的(像外部类中的方法中的变量)。 一、成员式 该中的 内部 类有可分为:类级别(static声明的 内部 类)和对象级别 innerclasses.java package innerclass; public class innerclasses { private
内部类
内部类有二种:成员式的(像外部类的属性)和区域式的(像外部类中的方法中的变量)。
一、成员式
该中的内部类有可分为:类级别(static声明的内部类)和对象级别
innerclasses.java
package innerclass;
public class innerclasses {
private static string staticattribute = outter class static attribute ;
private string instantattribute = outter class instant ;
//对象级别的方法
public void instantmethod(){
system.out.println(outter class instant method );
}
//类级别的方法
public static void staticmethod(){
system.out.println(outter class static method);
}
//类级别的内部类
/**
* 该内部类中的方法 必须方位外部类的类级别的属性和方法,否则不错。
* 如:只能访问外部类的staticattribute属性和staticmethod()方法
* */
public static class staticinnerclass{
public staticinnerclass(){
system.out.println(static inner class );
}
public void access(){
system.out.println(staticattribute);
staticmethod();
}
}
//对象级别的内部类
/**
* 该内部类可以访问外部类中的所有的方法和属性
* */
public class instantinnerclass{
public instantinnerclass(){
system.out.println(instant inner class);
}
public void access(){
system.out.println(instantattribute);
staticmethod();
}
}
}
内部类的访问方式:
1、类级别的内部类 通过外部类的类名访问内部类
2、对象级别的内部类,必须通过外部类的对象访问
package innerclass;
public class testclass {
public void callstaticinnerclass(){
//用外部类的类名来访问
innerclasses.staticinnerclass sic
= new innerclasses.staticinnerclass();
sic.access();
}
public void callinstantinnerclass(){
//访问对象级别的内部类需要 外部类的对象才能访问
//声明一个外部类的兑现ic
innerclasses ic = new innerclasses();
//对象访问 对象级别的内部类
innerclasses.instantinnerclass iic ;
iic = ic.new instantinnerclass();
}
}
抽象内部类
static修饰的内部抽象类 可以通过外部类的类名 访问到,被其他类继承
成员级别的内部类抽象类,只能被该外部类中的其他的内部类继承
二、区域式
该中的内部类可分为:变量级别的和匿名级别
变量级别的内部类即声明在方法中的类。该内部类不适用。
匿名内部类。即没有类名的内部类。
package innerclass;
import java.awt.frame;
import java.awt.event.windowadapter;
import java.awt.event.windowevent;
public class anonymousinnerclass {
public static void main(string[] args){
frame f = new frame(anonymous inner class example );
//该方法的参数是一个匿名内部类的应用
f.addwindowlistener(new windowadapter(){
public void windowclosing(windowevent e){
system.exit(0);
}
});
f.setsize(200,200);
f.setvisible(true);
}
}