我知道java不支持多重继承。我编写的代码如下所示。
abstract class abc {
public abstract void print();
}
abstract class xyz {
public abstract void print();
}
public class Test {
public static void main(String[] args) {
abc obj1 = new abc() {
public void print() {
System.out
假设有两个接口,它们有不同的方法。我在一个类中实现两个接口,并使用两个接口的方法。
interface A { void show1(); }
interface B { void show(); }
public class test implements A, B{
@Override
void show1(){
System.out.println("show1");
}
@Override
void show(){
System.out.println("show");
对于这类问题,我已经看到了多个答案,但我不知道如何解决。主要的问题可能是我正在处理其他人的代码,但是我。下面是这个问题的简化示例:我有一个类链接了许多其他类:
class Interface
: public system_atoms,
public system_io,
/* etc, others */
{
/* A few functions, none that matters here - none from the inherited classes redefined */
}
在system_atoms内部,我有:
class system_atoms {
我有以下代码:
public class HitController : MonoBehaviour, ICentroidHitListener
据我所知。HitController继承自MonoBehaviour并实现了ICentroidHitListener中的方法。
但是,如果我只想让它实现ICentroidListener中的方法,我该如何编码呢?我要这样写代码吗:
public class HitController : ICentroidHitListener
在这种情况下,看起来像是从ICentroidHitListener继承了HitController
因此,我知道在c++中,虚拟方法用于存储在表中的每个类,并且每个实例都有指向该表的指针。所以我的问题是子类表是什么样子的。我将提供一个汇编程序指令:
vtable for Derived:
.long 0
.long _typeinfo for Derived
.long _Derived::set()
.globl _vtable for Base
.section .rdata$vtable for Base,"dr"
.linkonce same_size
.align 4
因此,从这里我可以看到
在C#中,如果A实现IX,而B继承自A,那么B是否必然实现IX?如果是,是不是因为LSP?以下各项之间是否有区别:
1.
Interface IX;
Class A : IX;
Class B : A;
和
2.
Interface IX;
Class A : IX;
Class B : A, IX;
?
有没有一个与B通过继承链实现IX或B直接实现IX相关的术语?
PS:我假设在这两种情况下接口都是隐式实现的,而不是显式实现的。有没有在1上使用的模式,如果它们像在2中一样实现,就不能工作?
我可以通过更改属性名的输出来装饰抽象类播放器吗?例如,我的课是:
public abstract class Player
{
private FootBall ball;
private string name;
public Player(FootBall ball, string name)
{
this.name = name;
this.ball = ball;
}
public string Name
{
get
{
return t
我有以下代码:
#include <iostream>
class Grandma
{
public:
virtual void foo() = 0;
};
class Mom : public Grandma{};
class Dad
{
public:
void foo() { std::cout << "dad's foo impl"; }
};
class Me : public Mom, public Dad{};
int main()
{
Me m;
m.foo();
}
并得到:cannot
我知道钻石问题,但问题是-当我谷歌“虚拟继承”,结果提到只钻石问题。我想知道它一般是如何工作的,它与正常的继承有什么不同。
我知道当一个类(通常)从另一个类继承时,它只包含它的所有成员(字段和方法,不包括访问级别)。其中一些可能被新成员覆盖或隐藏,但它们仍然存在。继承还定义了层次结构中类之间的某些关系,从而影响到转换和多态性。
虚拟继承有何不同?例如:
class A
{
public:
int a;
int b;
void fun(int x)
{}
void gun(int x)
{}
};
class B : public A
{
假设我们有这个:
class A
{
public:
virtual void foo() = 0;
};
class B: public A
{
public:
virtual void foo() = 0;
};
编译器不会抛出错误,我猜这是因为B也是一个抽象类,因此它不需要从A实现foo。但是这样的构造意味着什么?
1)来自B的foo是否对A隐藏了foo?
2)从B继承的第一个类不是抽象类,它是否必须提供两个实现,如:
class C: public B
{
public:
virtual void A::foo() {};
virtual v
我有应用程序结构-
public abstract class a
{
}
//defined in a.dll
public abstract class b
{
}
//defined in b.dll
//Above 2 DLL reference added in main project where I want to derive both of this abstract classee like
public abstract class proj : a, b
{
}
我只能推导出其中的任何一个,而不是两个。因此,请指导我遗漏的东西或错误的代码我做了。
伙计们,在你们开始投票给我之前,请阅读这个问题,并请理解,我不想在这里开始任何不愉快的事情。
这个问题的唯一原因是,我越来越意识到,为了更具就业能力,我必须了解Java和/或C#。
好的,下面是问题:
我知道多重继承在J和C#中是被禁止的。但如果我这样做(因为我希望有一个继承自两个类B和A的类):
//code in Java
public class B
{
public void methodFromB()
{
}
}
public class A extends B
{
public void methodFromA()
{
}
}
我发现代码合同有点奇怪,我想知道是否有人知道原因……
好了,下面是一些代码示例:
部件1:
[ContractClass(typeof(IServiceCodeContract<>))]
public interface IService<T> where T : class { ... }
[ContractClassFor(typeof(IService<>))]
public abstract class IServiceCodeContract<T> : IService<T> where T : class { ... }
我最近遇到了一个奇怪的小程序问题,如果你能帮我找出这个行为的原因,那就太好了。
我的任务很简单--我想使用来显示一些对象,我希望Box2D能够计算出物体的位置。所以我的类层次结构如下所示:
我有一个基础抽象类B2DObject。它包含一些Box2D人员+其继任者的一些公共参数(名称、一些标志等)。它还有两个纯虚拟函数,将在后续类中重新实现。
然后,我实现了一些表示基本形状的类:圆圈、矩形、多边形等等。我这样做的方式如下:
class ExtendedPolygon : public B2DObject, public QGraphicsPolygonItem { ... };
class Ex
对不起,这个问题没有得到任何古怪的标题。
有人告诉我,.Net(C#)不支持多重继承。但是看看下面的foo例子,我想知道这真的是真的吗?
class fooList
{
public int Index()
{
return 0;
}
}
class foo : fooList
{
public foo()
{ }
}
class testFoo
{
void test()
{
foo obj = new foo();
// From object
obj.Equa
我想有一个接口IA和另一个扩展它IB。
然后A实现IA,B继承A,也实现IB。
但是,当编译B时出现错误,说明IA内容是未定义的,即使A定义了所有内容:(
class IA
{
public:
virtual ~IA(){}
virtual void foo()=0;
};
class IB : public IA
{
public:
virtual void bar()=0;
};
class A : public IA
{
public:
A();
void foo();
};
class B : public A, public IB
{
pu
我有一个带有两个纯虚函数的抽象类,并且我从它派生的一个类没有使用一个纯虚函数:
class derivative: public base
{
public:
int somevariable;
void somefunction();
};
无论如何,当我试图编译它时,我得到了一个错误(显然,如果一个类派生自一个抽象类并且没有覆盖所有的纯虚函数,那么它仍然被认为是抽象的)。无论如何,定义一个函数似乎毫无意义。
int purevirtfunc(){return 0;}
仅仅因为它需要通过技术细节来定义。有没有办法从抽象类派生一个类,而不使用抽象类的纯虚函数?
我理解虚拟基类机制的存在是为了防止“钻石”问题。但我很好奇,如果重新设计类层次结构不能更好地处理这种情况。以以下案例为例:
class A { public: void Foo() {} };
class B : public virtual A {};
class C : public virtual A {};
class D : public B, public C {};
我现在看到的机制存在的问题是,您需要能够预测某个人将从B和C继承过来吗?所以,这并不意味着我们最好用虚拟标记来标记每一个继承?
让我们来看两个类的实例
public abstract class Shapes
{
public abstract void draw(Graphics g);
}
public class Rectangle extends Shapes
{
public void draw(Graphics g)
{
//implementation of the method
}
}
在这里,类Rectangle扩展了类Shapes,并且隐式地扩展了类Object。我知道不可能有其他扩展,但我们不能将继承的类称为Shapes和Obje
在C++中,是否可以使用另一个基类来提供派生类中接口(即抽象基类)的实现?
class Base
{
virtual void myfunction() {/*...*/};
}
class Interface
{
virtual void myfunction() = 0;
}
class Derived
: public Base, public Interface
{
// myfunction is implemented by base
}
上面的代码应该会编译,但实际上并不起作用。有没有办法达到这个效果呢?
如果有人关心,希望这样做的原因是(对于我的