开发者社区> 问答> 正文

关于Java当中继承的疑问 报错

"

这是我运行的Test.java文件的源码,Sub类继承的是Main类,MyThreadA和MyThreadB都是线程类

package service;

public class Test {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Sub subRef = new Sub();
    MyThreadA a = new MyThreadA(subRef);
    a.setName("A");
    a.start();
    MyThreadB b = new MyThreadB(subRef);
    b.setName("B");
    b.start();
}

}

如下是控制台的运行结果,我的疑问是为什么Main类里面的serviceMethod()方法也被调用了?线程MyThreadA和线程MyThreadB的run()方法不是只是调用了Sub类里面的serviceMethod()方法吗?

int sub 下一步 sleep begin threadName=A time=1521894980829
int sub 下一步 sleep begin threadName=B time=1521894980829
int sub 下一步 sleep end threadName=A time=1521894985834
int sub 下一步 sleep end threadName=B time=1521894985834
int main 下一步 sleep begin threadName=A time=1521894985835
int main 下一步 sleep end threadName=A time=1521894990838
int main 下一步 sleep begin threadName=B time=1521894990838
int main 下一步 sleep end threadName=B time=1521894995840

如下是MyThreadA类

package service;

public class MyThreadA extends Thread {
    
    private Sub sub;

    public MyThreadA(Sub sub) {
        super();
        this.sub = sub;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        sub.serviceMethod();
    }
    
    
}

如下是MyThreadB类

package service;

public class MyThreadB extends Thread {
    
    private Sub sub;

    public MyThreadB(Sub sub) {
        super();
        this.sub = sub;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        sub.serviceMethod();
    }
    
    
    
}

如下是Main类

package service;

public class Main {
    synchronized public void serviceMethod() {
        try {
            System.out.println("int main 下一步 sleep begin threadName="
                    + Thread.currentThread().getName() + " time="
                    + System.currentTimeMillis());
            Thread.sleep(5000);
            System.out.println("int main 下一步 sleep end threadName="
                    + Thread.currentThread().getName() + " time="
                    + System.currentTimeMillis());
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
}

如下是Sub类,继承Main类

package service;

public class Sub extends Main {
    @Override
    public void serviceMethod() {
        try {
            System.out.println("int sub 下一步 sleep begin threadName="
                    + Thread.currentThread().getName() + " time="
                    + System.currentTimeMillis());
            Thread.sleep(5000);
            System.out.println("int sub 下一步 sleep end threadName="
                    + Thread.currentThread().getName() + " time="
                    + System.currentTimeMillis());
            super.serviceMethod();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
}
"

展开
收起
因为相信,所以看见。 2020-05-27 10:03:09 1063 0
1 条回答
写回答
取消 提交回答
  • 阿里,我所有的向往

    "

    你给你一个结果,比如加密 我只是个测试! 密文 是什么? 多加密几个。

    提供,明文 和 密文,然后用php实现的时候 才知道 明文 加密后 密文 对不对呀。

    ######

    http://www.thinkphp.cn/topic/...

    看看这个写的挺多的 关于aes加密

    "
    2020-05-27 17:34:48
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载