从OOP的角度来看,派生类和继承类之间有什么区别吗?或者只是术语?
我从事一个相对复杂的Java项目,其中类之前通常有四个或五个祖先Object.给定这样的类,例如D在这样的层次结构中:Object > A > B > C > D,我想知道它有效实现的所有接口.也就是说,我也有兴趣看到这些D实现,Serializable即使它只在类的声明中声明,B甚至D实际上没有实现接口指定的任何方法(当然,如果谈论Serializable).
我尝试过的这些信息的一些潜在来源包括:
有没有办法在IDEA中获取此信息而无需打开相关类的所有祖先类的文件?
我正在"玩"C++中的虚拟继承,我想知道如何布置类对象.我有这三个班:
class A {
private:
int a;
public:
A() {this->a = 47;}
virtual void setInt(int x) {this->a = x;}
virtual int getInt() {return this->a;}
~A() {this->a = 0;}
};
class B {
private:
int b;
public:
B() {b = 48;}
virtual void setInt(int x) {this->b = x;}
virtual int getInt() {return this->b;}
~B() {b = 0;}
};
class C : public A, public B {
private:
int c;
public:
C() {c = 49;}
virtual void setInt(int x) {this->c = x;} …Run Code Online (Sandbox Code Playgroud) 我正在寻求了解Delphi 7中其他人的代码(我怀疑新版本内置了这个代码,但我不想为最新版本提供> $ 1k).
他们的任何(最好是FOSS)工具会帮我生成一个类层次结构图吗?
我正在努力为某些对象(这些对象的字段)设计一个验证器。这些物体被封装在一个更大的物体——容器中。
示例:汽车作为容器。由车轮、发动机、车身组成。可以说我需要验证车轮是否具有正确的直径,发动机是否具有正确的容量,车身是否具有一定的长度等。
理论上,我认为我应该在建造容器(汽车)之前验证一切。
实现这一目标的最佳方法是什么?我是否使用 validate() 方法创建一个抽象验证器类并在每个封闭的类中实现它?容器怎么样,我是否根本不将其包含在验证过程中?感谢帮助。
我知道如何编写和使用简单的类,我甚至知道继承如何工作以及如何使用它.但是,关于如何实际设计类层次结构,甚至如何设计简单类的指南数量非常有限?另外,我何时以及为什么要继承(或使用)一个类?
所以我不是在问我怎么样,我在问何时以及为什么.示例代码总是一种很好的学习方式,所以我很感激它们.此外,强调设计的进展,而不是简单地给出一个句子的时间和原因.
我主要使用C++,C#和Python编程,但我可能会理解大多数语言中的简单示例.
如果任何条款似乎混淆了,请随时编辑我的问题.我不是本地人,我不确定所有的话.
寻找一种工具:
无法完成此任务的工具包括:
有任何想法吗?
我有一个扩展另一个类的类,它扩展了另一个类......依此类推.
具有100级层次结构级别的缓慢(百分比)类将起作用,然后具有10级层次结构级别的类?
我现在正在阅读"Scala编程"一书.在第11章中,它提到:
请注意,值类空间是平的.
但没有人解释它的含义.那很重要么?为什么?如何使用以及如何检查价值类空间是非常平坦的.看来,它应该告诉ref类空间不平坦,但不是,没有其他的话再说一遍.所以我想知道"空间是平的"是什么意思,以及为什么价值类空间是平的.
我有一个继承自'MyClass'的2个子类,每个子类应该是一个单例.
当我没有继承任何其他类时,我已经使用此模式获取静态实例:
+ (MyClass *)getInstance
{
static dispatch_once_t once;
static MyClass *instance;
dispatch_once(&once, ^{
instance = [[MyClass alloc] init];
});
return instance;
}
Run Code Online (Sandbox Code Playgroud)
这很有用.现在,如果我添加两个新的子类,FirstClass和SecondClass,它们都继承自MyClass,我如何确保返回相应的ChildClass?
dispatch_once(&once, ^{
// No longer referencing 'MyClass' and instead the correct instance type
instance = [[[self class] alloc] init];
});
FirstClass *firstClass = [FirstClass getInstance]; // should be of FirstClass type
SecondClass *secondClass = [SecondClass getInstance]; // should be of SecondClass type
Run Code Online (Sandbox Code Playgroud)
执行上述操作意味着我总是回到我实例化的第一类作为我的第二类类型:
first: <FirstClass: 0x884b720>
second: <FirstClass: 0x884b720>
// Note that the address and type …Run Code Online (Sandbox Code Playgroud) class-hierarchy ×10
inheritance ×4
java ×4
c++ ×2
call-graph ×1
class ×1
delphi ×1
dump ×1
interface ×1
objective-c ×1
oop ×1
performance ×1
python ×1
scala ×1
singleton ×1
superclass ×1
terminology ×1
validation ×1