Java多线程和继承
在这些情况下,Java多线程和继承,java,inheritance,Java,Inheritance,在这些情况下,B是一个可运行的 写下以下内容是否有效: class A implements Runnable class B extends A 如果有效,在B中运行方法是否会覆盖A的方法? 可能出现的情况是什么? 我很困惑…好吧,通过扩展A,您已经实现了Runnable,所以您只需重写run()方法,就可以在Mordor中运行 如果您不这样做,超类run()将生效。好吧,通过扩展,您已经实现了Runnable,因此您只需重写run()方法,所有这些都将在Mordor中正常运行 如果不这
B
是一个可运行的
写下以下内容是否有效:
class A implements Runnable
class B extends A
如果有效,在B
中运行方法是否会覆盖A
的方法?
可能出现的情况是什么?
我很困惑…好吧,通过扩展A,您已经实现了Runnable
,所以您只需重写run()
方法,就可以在Mordor中运行
如果您不这样做,超类run()
将生效。好吧,通过扩展,您已经实现了Runnable
,因此您只需重写run()
方法,所有这些都将在Mordor中正常运行
如果不这样做,超类run()
将生效。它是有效的,因为接口只定义方法存在。B.run将重写A的Runnable,这与B未直接实现Runnable或A未实现Runnable但具有公共void run()方法的情况相同。这是有效的,因为接口仅定义方法存在。B.run将重写A的Runnable,这与B没有直接实现Runnable或A没有实现Runnable但有一个公共的void run()方法一样。因为“实现Runnable
”没有向类中引入任何可执行代码,但基本上只是承诺实现必要的方法,重复“implements Runnable
”在一个已经扩展了另一个实现了Runnable
的类上,实际上什么都不做
在使用反射时,可以看到非常细微的差别,但除此之外没有差别。因为“实现可运行的”
”并没有将任何可执行代码引入类,而基本上只是承诺实现必要的方法,重复“实现可运行的”
“对于已经扩展了另一个实现了Runnable
的类,实际上什么都不做
在使用反射时,可以看到非常细微的差别,但除此之外,没有差别。这就足够写了
class B extends A implements Runnable
类A已经实现了runnable,因此扩展它也会使它可以运行。要执行特定于类B的操作,请重写类B中的run()。只需编写
class B extends A implements Runnable
class B extends A
类A已经实现了runnable,因此扩展它也会使它可以运行。要执行特定于类B的操作,请重写类B中的run()
class B extends A
是有效的Java语法,但实际上什么都不做。通过扩展A,B是可运行的
当对对象调用run方法时,将调用对象的run方法。对B对象调用run时,将调用a的run方法,除非B重写a的run方法
考虑以下几点:
class B extends A implements Runnable
是有效的Java语法,但实际上什么都不做。通过扩展A,B是可运行的
当对对象调用run方法时,将调用对象的run方法。对B对象调用run时,将调用a的run方法,除非B重写a的run方法
考虑以下几点:
class B extends A implements Runnable
这个问题与多线程无关<代码>可运行
实例不必在单独的线程中运行。这个问题与多线程无关<代码>可运行实例不必在单独的线程中运行。如果我执行以下操作:线程t1=新线程(new A());螺纹t2=新螺纹(新B());t1.start();t2.start()@凯文:完全一样。多线程与此无关。相同。t1中的线程将打印“A的运行方法”,t2中的线程将打印“B的运行方法”。@Bombe@Jesper但是B中的运行不会覆盖A中的运行,那么两个运行都应该打印“B的运行方法”Kevin-当您执行“新建A()”时,您已经创建了A的实例,而不是B。如果我执行以下操作:线程t1=新建线程(新建A());螺纹t2=新螺纹(新B());t1.start();t2.start()@凯文:完全一样。多线程与此无关。相同。t1中的线程将打印“A的运行方法”,t2中的线程将打印“B的运行方法”。@Bombe@Jesper但是B中的运行不会覆盖A中的运行,那么两个运行都应该打印“B的运行方法”Kevin-当您执行“new A()”时,您已经创建了A的实例,而不是B。