[b]从一个问题开始:有抽象内部类么?[/b]
[i]自己先在天涯上发了个帖子,自己想了一会,觉得答案是这样的,就自问自答了:因为内部类的方法和属性不能是静态的,所以必须要实例化,才能进行调用,而抽象类无法实例化,故没有抽象内部类![/i]
然而有想了,再接着往下的话,那就是内部类的应用呢?
理论上是正确的,但是输出的时候出现了异常,不解。
时时求解,更新中.....
如果有谁告知解决方法,不胜感激!
[i]自己先在天涯上发了个帖子,自己想了一会,觉得答案是这样的,就自问自答了:因为内部类的方法和属性不能是静态的,所以必须要实例化,才能进行调用,而抽象类无法实例化,故没有抽象内部类![/i]
然而有想了,再接着往下的话,那就是内部类的应用呢?
/**
*cailong1028 2009-9-23
*
*/
public class AbstractInner {
//对所有的内部类调用的一个通用的方法1
Dsa dsa=new Dsa();
//对所有类型(静态,非静态)的内部类调用的一个通用的方法2,建议使用这种方法
private Dsa dsa1;
private Asd asd2;
public Dsa getDsa(){
return dsa1;
}
public Asd getAsd(){
return asd2;
}
public static void main(String[] args){
String str="外部类的输出";
new AbstractInner.Asd().speak();//对静态内部类的调用
AbstractInner a=new AbstractInner();//这两行是对非静态内部类的调用,首先在外部类体中定义一个非静态的内部类的对象(原因一:内部类的方法都是非静态的,需要首先定义一个实例,原因二:由于main方法是静态的不能调用非静态的内部类,只有在此静态方法外部声明一个对象(当然如果仅限于第一个原因的话,可以将非静态内部类的生命定义在一个非静态方法的内部)),然后再在main()静态方法中定义一个外部类对象,用来调用内部类对象,以及内部类的方法
a.dsa.speak();//就像调用属性般调用内部类的对象
System.out.println(str);
System.out.println("×××××××××××××");
//对所有的内部类调用的一个通用的方法2的执行
AbstractInner a2=new AbstractInner();
a2.getDsa().speak();
a2.getAsd().speak();
System.out.println(str);
System.out.println("×××××××××××××");
}
//静态的内部类1
static class Asd{
void speak(){
System.out.println("静态内部类方法输出!");
}
}
//内部类2,非静态的内部类
class Dsa{
void speak(){
System.out.println("非静态内部类的方法输出!");
}
}
}
理论上是正确的,但是输出的时候出现了异常,不解。
时时求解,更新中.....
如果有谁告知解决方法,不胜感激!