日期:2014-05-20  浏览次数:20723 次

求解:Java中如何实现多继承,想写一个类继承TimerTask和封装好的类A
虽然java中明确指明不能多继承,但小妹还是想试试看有没有什么曲线救国的方法。问题如下:
写一个MyTask类继承java.util.TimerTask类和一个封装好的类,切叫A吧,看不到里面。
在网上查有一个方法通过内部类来实现多继承。然,写代码如下,不报错,但执行到InnerMyTask task=new InnerMyTask();报错“Exception in thread "Timer-0" java.lang.NoClassDefFoundError: com/MyTask$InnerMyTask”
还请哪位高人指点看是那写的不对还是根本实现不了。
小妹在这多谢O(∩_∩)O~
package com;

import java.util.Calendar;
import java.util.TimeZone;
import java.util.TimerTask;

import javax.servlet.ServletContext;

import com.aisino.platform.core.SqlPlugin;
import com.aisino.platform.db.DbSvr;
import com.aisino.platform.view.AbstractForm;
import com.aisino.platform.view.DataMsgBus;
import com.aisino.platform.view.listener.SubmitListener;

public class MyTask extends TimerTask {
private static final int HOUR=8;
private static boolean isRunning=false;
private ServletContext context=null;

public MyTask(){

}
class InnerMyTask extends A{

public void fangfa() {//方法

}

}

public void run() {
Calendar cal=Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));//统一时间的位置
if(!isRunning){
if(HOUR==cal.get(Calendar.HOUR_OF_DAY)){
isRunning=true;
context.log("开始执行指定任务");
//要做的操作
InnerMyTask task=new InnerMyTask(); //执行到这行出错
task.fangfa(); //调用方法
isRunning=false;
context.log("制定任务执行结束");
}

}else{
context.log("上一次执行的任务还未结束");
}
}
}


------解决方案--------------------
可以通过定义接口来实现,类似于public class My1 extends My implements My2,My3
------解决方案--------------------
应该是可以的,怎么会找不到类?
你把InnterMyTask改成static试试看
我觉得你是在实例方法里调用,应该和static没关系的,是不是A类有什么限制,导致编译的时候InnerMyTask就不能编译成功?

------解决方案--------------------
显然你没找到问题的关键..下面这段简单的代码运行正常...

public class TestExtendA extends A{

public TestExtendA(){

}
class TestInnerExtendsB extends InnerB{
public void method(){
System.out.println("inner method");
}
}

public void run(){
TestInnerExtendsB testrun = new TestInnerExtendsB();
testrun.method();
}

public static void main(String args[]){
TestExtendA testA = new TestExtendA();
testA.run();
}

}


输出:
inner method





public class A {

}

public class InnerB {

}