The*_* do 2 c# java inheritance
在你开始投票给我之前请大家阅读这个问题,请理解我不会尝试在这里开始任何不愉快的事情.
这个问题的唯一原因是我越来越意识到这一点,为了更有用,我必须知道Java和/或C#.
好的,这是一个问题:
我知道在J和C#中禁止多重继承.但是如果我做这样的事情(因为我希望有一个继承自B和A两个类的类):
//code in Java
public class B
{
public void methodFromB()
{
}
}
public class A extends B
{
public void methodFromA()
{
}
}
public class C extends A
{
public void methodFromC()
{
}
}
Run Code Online (Sandbox Code Playgroud)
事实上,据我所知,我确实继承了它们(A和B,是的,我确实理解对此的正式解释是对象A是一个专门的B但是如果我想这样做的话就更少了我会,但它看起来不漂亮)
但是,不是在一个声明中执行此操作,而是必须首先创建一个继承自另一个类的类,然后从它派生?
虽然有趣的事情.在上面声明了这些类(在NetBeans中)后,我看到在创建了类C的实例(在main中)之后,我无法在它上调用methodFromC,这是在这个类中定义的方法.
这是什么原因?
谢谢.
即使您正在创建一个实例C,C的方法是否可见依赖于您正在使用的编译时类型.例如,
C c = new C();
c.methodFromC(); // fine
Run Code Online (Sandbox Code Playgroud)
是有效的,但是
A a = new C();
a.methodFromC(); // compiler error
Run Code Online (Sandbox Code Playgroud)
不是,因为编译时类型是一个A,它没有methodFromC声明.
请注意,由于C和A都是B的子类,methodFromB因此在两种情况下调用都可以.
我同意mdma.另请注意,这不是多重继承,这是链式继承.多重继承是当一个类在从不止一个类继承同一时间:
class A {}
class B {}
class C extends A, B {}
Run Code Online (Sandbox Code Playgroud)
如果你没有用C++编码,这是禁止的