我对这个简单的OOP练习(C#/Java)有困难
鉴于这段代码:我对这个简单的OOP练习(C#/Java)有困难,java,c#,oop,inheritance,polymorphism,Java,C#,Oop,Inheritance,Polymorphism,鉴于这段代码: public static void main(String[] args) { C c = new A(); B bl = (B)(new A()); B b2 = new D(); A a = new D(); } 我需要根据给定的代码确定类之间的关系,并从下面的列表中选择正确的答案: C从A继承,B从A继承,D从A继承 A从C继承,B从A继承,D从A继承 C从A继承,B从A继承,D从B继承 A从C继承,C从B继承,D从A继承 A从C继承,B
public static void main(String[] args)
{
C c = new A();
B bl = (B)(new A());
B b2 = new D();
A a = new D();
}
我需要根据给定的代码确定类之间的关系,并从下面的列表中选择正确的答案:
为什么是这样?将非常感谢您的帮助:)根据第四个答案,依赖关系树看起来像(从最上面的类开始):
B->C->A->D
,分解为:
public static void main(String[] args)
{
C c = new A(); // C->A (direct parent)
B bl = (B)(new A()); // B->C->A (2 levels up), casting to B can be avoided
B b2 = new D(); // B->C->A->D (3 levels up)
A a = new D(); // A->D (direct parent)
}
这是唯一一个选项,在所有代码行中都可以使用,没有例外 仅仅因为不需要施法并不意味着你可以明确地说出来。你是对的-从技术上讲,你不需要(B)在: 无论如何,获取此依赖关系树并不一定简单。以下是您真正了解的:
public class A : B { }
public class B : C { }
public class C { }
public class D : A { }
选项B:B是基类。
B是基类。毕竟,它不是从任何东西中衍生出来的,所以没有理由不能。与第一个选项类似,A必须从B和C派生,这意味着C直接位于A和B之间的链的上游。同样,D派生自A,因此它位于长链的底部
public class A : C { }
public class B { }
public class C : B { }
public class D : A { }
所以,当一切都说了又做了:
- A:继承自B和C
- B:可能是从C继承的
- C:可能是从B继承的
- D:继承自A、B和C
C
也可以是B
的基类B
可以是一个接口。根据教科书中提供的详细信息,B是一个类。试着编写实际的类来测试它,看看它与您的期望有什么不同。这似乎只需要使用您已有的知识就代码进行争论,而这也可以通过编写一些代码轻松解决,这并不是最有用的问题。这似乎不像你能推断什么,而是a。以下哪项是正确的,因为它没有告诉你C和B之间的直接关系。你能详细说明你是如何在第二行得出结论的吗?@blablabla:B
是a
@Tigran的基类这并不一定意味着B是C的基类。正确答案之所以正确,只是因为它是唯一适合的。@juharr:我从来没有说过,对于那行代码,这是唯一可能的解释。问题是,为什么第四个答案对于所提供的代码是正确的,所以我的答案旨在解释为什么它满足所提供示例中的所有代码条件。
public class A : C { }
public class B { }
public class C : B { }
public class D : A { }