我正在尝试在java中执行以下操作:
public class ClassName<E> extends E
Run Code Online (Sandbox Code Playgroud)
不过这样做,我得到了:
error: unexpected type
Run Code Online (Sandbox Code Playgroud)
是不是就是这样,java不能这样做? - 如果是的话,我将如何实现这种效果?它在C++中完美运行,使用模板,类似:
template<typename E>
class ClassName: public E
Run Code Online (Sandbox Code Playgroud)
我真正想要实现的是能够以这种方式将类链接在一起,以实现java中多重继承的效果.
我在我的应用程序上设置了Doctrine多表继承 - 见下文
/**
* @Entity
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="type", type="string")
* @DiscriminatorMap({
* "news" = "News" ,
* "press_release" = "PressRelease"})
*
* @table(name="pages")
*/
class PressRelease extends Page {...}
class News extends Page {...}
Run Code Online (Sandbox Code Playgroud)
我的自定义存储库查询
$query = $this->getEntityManager()->createQuery('SELECT u FROM MyStoreBundle:User u
LEFT JOIN u.page p
WHERE p INSTANCE OF :newsType'
)->setParameter('newsType', new News());
Run Code Online (Sandbox Code Playgroud)
我认为这会工作,但我不断收到以下错误:
Notice: Undefined index: id in /path/to/Symfony/vendor/doctrine/orm/lib/Doctrine/ORM/AbstractQuery.php line 282
Run Code Online (Sandbox Code Playgroud)
显然我的News实体没有一个id字段,因为这是在扩展Page具有id定义属性的类时继承的,有谁知道我做错了什么?
提前致谢
我是一名Java程序员,学习在Go中编程.到目前为止,我非常喜欢这种语言.比Java更多.
但有一件事我有点困惑.Java具有接口,因为类只能从一个类继承.由于Go允许多重继承,接口的重点是什么?
我有A类继承了B类.并希望实现类似下面的东西.但是由于动态类型转换,init方法会得到递归调用.有没有办法实现这样的?有什么建议吗?(不改变子类中'init的名字?
@interface A : NSObject
@property NSData * data;
@end
Run Code Online (Sandbox Code Playgroud)
@implementation A
- (id) init {
self = [super init];
/* want to do some default initialization here
for this class and all of its subclasses. */
// ... ...
return self;
}
/* This [self init] get recursed.
But how can I force this class and all of its subclass to call [self init] above,
not to call the subclass's init method. */
- (id) initWithData:(NSData *)d {
self …Run Code Online (Sandbox Code Playgroud) 假设我有2个班级
Class A {
public function doA(){
echo "Im A";
}
}
Class B {
public function doB(){
echo "Im B";
}
}
Run Code Online (Sandbox Code Playgroud)
编写C类,以便运行以下代码:
$c = new C();
$c->doA();
$c->doB();
Run Code Online (Sandbox Code Playgroud)
和输出:
>> Im A
>> Im B
Run Code Online (Sandbox Code Playgroud)
这是一个测试,其中的条件:
所以我写道:
Class C {
public function doA() {
$a = new A();
$a->doA();
}
public function doB() {
$b = new B();
$b->doB();
}
}
Run Code Online (Sandbox Code Playgroud)
显然我错了,因为它可以"更优化"
谁能告诉我怎么做?
我有一个类的结构,我想应用一些奇怪的约束:
public abstract class TopClass {}
public class ClassA : Topclass {}
public class ClassB : Topclass {}
public class ClassC : Topclass {}
public class ClassD : Topclass {}
public class ClassE : Topclass {}
Run Code Online (Sandbox Code Playgroud)
我想将这些分为几类,其中一些重叠,所以我可以在使用时要求这种组合TopClass.由于C#不支持多重继承,我一直在尝试使用接口:
public abstract class TopClass {}
public interface IGroupA {}
public interface IGroupB {}
public class ClassA : Topclass, IGroupA {}
public class ClassB : Topclass, IGroupA {}
public class ClassC : Topclass, IGroupA, IGroupB {}
public class ClassD : Topclass, IGroupB …Run Code Online (Sandbox Code Playgroud) 我正在实施这个钻石继承:
class Object {
private:
int id; string name;
public:
Object(){};
Object(int i, string n){name = n; id = i;};
};
class Button: virtual public Object {
private:
string type1;
int x_coord, y_coord;
public:
Button():Object(){};
Button(int i, string n, string ty, int x, int y):Object(i, n){
type = ty;
x_coord = x;
y_coord = y;};
};
class Action: virtual public Object {
private:
string type2;
public:
Action():Object(){};
Action(int i, string n, string t):Object(i, n){ type2 = t;};
};
class ActionButton: …Run Code Online (Sandbox Code Playgroud) 当我创建一个新类时,它就是
ClassA extends Object{
}
Run Code Online (Sandbox Code Playgroud)
所以,如果我要从ClassB继承ClassA,那就不是了
ClassA extends Object extends ClassB {
}
Run Code Online (Sandbox Code Playgroud)
这基本上是Java中不允许的多重继承.
或者对于Object类是否有一个特殊的例外,这意味着确实可以安全地说,Java中的每个基类都只从2个类继承?
我一直在查看C++核心指南项目C.129并复制粘贴了一个多继承示例,但无法弄清楚为什么MS编译器和CLang都会向我显示相同的错误...它必须非常简单!
代码:
class Shape { // pure interface
public:
virtual void draw() = 0;
};
class Circle : public Shape { // pure interface
public:
virtual int radius() = 0;
};
class Shape_Impl : public Shape {
public:
void draw() override {}
};
class Circle_Impl : public Shape_Impl, public Circle {
public:
int radius() override { return 42; }
};
int main()
{
Circle_Impl* ic = new Circle_Impl();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么Circle_Impl在"Circle_Impl"错误中使用"未实现的纯虚方法'绘制' 实例化失败?" 还没有draw实现在被定义 …
这样我就可以使用我的代码了,但是有两行让我搞砸了,而且不太确定该放什么。
代码(标有两行):
class Person(object):
numPerson = 0
def __init__(self,firstName,lastName):
self.firstName = firstName
self.lastName = lastName
def fullName(self):
print self.firstName +' '+self.lastName
class Employee(Person):
numEmployee = 0
def __init__(self,firstName,lastName,pay,employID):
Person.__init__(self, firstName, lastName)
self.pay = pay
self.employID = employID
Employee.numEmployee += 1
class Programmer(Employee):
def __init__(self,firstName,lastName,pay,employID,proLang):
self.proLang = proLang
Employee.__init__(self, firstName, lastName, pay, employID)
class Manager(Employee):
def __init__(self,firstName,lastName,pay,employID,progList):
self.progList = progList
Employee.__init__(self, firstName, lastName, pay, employID)
def addProgrammer(self):
self.progList.append(Programmer.fullName) <------------------- This line
def removeProgrammer(self):
if len(self.progList) == 0:
pass
else:
del self.progList[0] …Run Code Online (Sandbox Code Playgroud)