Tag: oop

为什么我不能使用equalsinheritance?

当我读一本Java书时,作者已经说过,在设计类时,使用带inheritance的equals()通常是不安全的。 例如: public final class Date { public boolean equals(Object o) { // some code here } } 在上面的类中,我们应该把final ,所以其他类不能从这inheritance。 我的问题是,为什么在允许另一个类从此inheritance时它是不安全的?

用作接口替代的内部类的示例

我被告知,这引起了我对这个话题的好奇心: Java gui类可以实现数百个Listener和Callbacks,许多书籍教你在gui类中实现所有这些接口。 或者,这些方面可以在内部类中实现,因此该侦听器调用的方法不会混淆。 我想知道如何在ActionScript中执行此操作,ActionScript没有内部类,但具有私有类。 但是,我不认为我完全意识到内在的课程是什么,所以我只是试图绕过我将用它们按用法组织课程方法的情况。 如果可能的话,请展示ActionScript中的外观示例,否则为Java。

在Java中欺骗单一inheritance?

我听说有一种方法可以欺骗单inheritance并在Java中实现多inheritance。 有谁知道如何实现这个(没有使用接口)? 只是出于好奇;-)

在任何派生类的构造函数之后运行方法

假设我有一个Java类 abstract class Base { abstract void init(); … } 我知道每个派生类在构造之后都必须调用init() 。 当然,我可以简单地在派生类的构造函数中调用它: class Derived1 extends Base { Derived1() { … init(); } } class Derived2 extends Base { Derived2() { … init(); } } 但是这打破了“不要重复自己”的原则而且非常糟糕(并且会有很多Base子类)。 当然, init()调用不能进入Base()构造函数,因为它会执行得太早。 任何想法如何绕过这个问题? 我也很高兴看到Scala解决方案。 更新:这是工厂方法方法的通用版本: interface Maker { T make(); } class Base { … static T makeAndInit(Maker maker) […]

在Java中使用省略号(…)?

我正在查看一些代码并看到以下表示法。 我有点不确定这三个点是什么意思,你称之为什么。 void doAction(Object…o); 谢谢。

如何在Java中的基类和派生类实例之间组织物理内存?

当实例化子类C ,已知其超类的构造函数(比如A和B ( B扩展A ))将比C更早地实例化。 这是否意味着: 为A的实例,B的实例和C的实例分配了单独的内存? 对于子类C 的实例,它是否具有为从B和Ainheritance的字段分配的所有物理内存,以及它自己的字段? B的实例除了自己的实例还有从Ainheritance的字段的物理内存吗?

业务类和域类有什么区别? 持久化类是什么意思?

业务类和域类有什么区别? 持久化类是什么意思?

Java:枚举常量中方法和变量的定义

我正在做一些实验并且意外地编写了一个代码,这非常奇怪而且我不能完全理解。 我甚至感到惊讶,我可以编译它。 它看起来像这样: enum Foo { VALUE_1 { public int myVariable = 1; }, VALUE_2 { public void myMethod() { // } }, VALUE_3; } 正如预期的那样,不可能通过以下方式访问这样的元素: Foo.VALUE_2.myMethod(); 原因是,编译器将在枚举本身内查找该方法。 我假设不可能从枚举之外访问这些方法和变量。 出于这个原因,我尝试创建一个参数化构造函数并使用一些内部变量调用它: enum Foo { VALUE(internalVariable) { int internalVariable = 1; }; private Foo(int param) { // } } 编译这样的结构是不可能的。 现在我在想如果没有办法访问它,那么在常量中定义一些内容是什么意思。 我试图在常量中创建同名的方法以及枚举本身,以检查它是否以某种方式发生碰撞。 它没有! enum Foo { VALUE_1 […]

如何在Java中的不同类之间共享数据

在Java中的不同类之间共享数据的最佳方法是什么? 我有一堆变量,不同的类以不同的方式在不同的文件中使用。 让我试着说明我的问题的简化版本: 这是我之前的代码: public class Top_Level_Class(){ int x, y; // gets user input which changes x, y; public void main(){ int p, q, r, s; // compute p, q, r, s doA(p,q,r); doB(q,r,s); } public void doA(int p, int q, int r){ // do something that requires x,y and p, q, r } public […]

动态调度和绑定

动态调度和动态绑定是一回事吗? 谢谢 马切伊