内部类浅解

[b]从一个问题开始:有抽象内部类么?[/b]
[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("非静态内部类的方法输出!");
}
}
}


理论上是正确的,但是输出的时候出现了异常,不解。
时时求解,更新中.....
如果有谁告知解决方法,不胜感激!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值