Tag: oop

如何创建一个“扩展”两个现有具体类的类

我非常清楚它可以在界面的帮助下完成,而且我已经多次完成了。 但这次我的情况有很大不同。 我有class A class B ,我需要创建另一个class C ,它扩展了A和B,因为C应该具有两个function,并且还注意A和B不是相互关联的,所以即使我不能说A可以扩展class B 。 我现在应该怎么做才很困惑。 我知道我们不能改变java …但至少会有一些方法可能。 即使是最近的也可以……请帮帮我。 添加更多细节: – Class B是标准API,而class A是需要由所有exception类inheritance的公共exception类。 相关问题: 为什么Java中没有多重inheritance,但允许实现多个接口? (虽然我上面的问题并不是为什么不允许这样做。)

Java:inheritance构造函数

我希望有一个构造函数,其参数可以自动由所有子类inheritance,但Java不允许我这样做 class A { public A(int x) { // Shared code here } } class B extends A { // Implicit (int x) constructor from A } class C extends A { // Implicit (int x) constructor from A } 我不想为每个子类编写B(int x) , C(int x)等。 是否有更聪明的方法来解决这个问题? 解决方案#1。 创建一个可以在构造函数之后调用的init()方法。 这是有效的,虽然对于我的特定设计,我想要求用户在构造函数中指定在编译时validation的某些参数(例如,不通过varargs / reflection)。

Java:覆盖父类的静态变量?

我有以下类,我正在使用它作为我项目中所有模型的基础: public abstract class BaseModel { static String table; static String idField = “id”; public static boolean exists(long id) throws Exception { Db db = Util.getDb(); Query q = db.query(); q.select( idField ).whereLong(idField, id).limit(1).get(table); return q.hasResults(); } //snip.. } 我正试图通过以下方式扩展它: public class User extends BaseModel { static String table = “user”; //snip } 但是,如果我尝试执行以下操作: if […]

隐藏的字段虽然inheritance

在以下代码示例中: class Parent { int x =5; public Integer aMethod(){ System.out.print(“Parent.aMthod “); return x; } } class Child extends Parent { int x =6; public Integer aMethod(){ System.out.print(“Child.aMthod “); return x; } } class ZiggyTest2{ public static void main(String[] args){ Parent p = new Child(); Child c = new Child(); System.out.println(px + ” ” + […]

跳过父构造函数来调用祖父母

问题是这样的:我有一个抽象类在它的构造函数中做了一些工作,还有一组实现抽象类的子类: class AbstractClass { AbstractClass(){ /* useful implementation */ } } class ConcreteClass1 extends AbstractClass { ConcreteClass1(){ super(); /* useful implementation */ } } 然后,需要定制具体类,一个解决方案是扩展具体类: class CustomizedClass1 extends ConcreteClass1 { CustomizedCLass1(){ super(); /* useful implementation */ } } 但问题是定制类只需要调用抽象类的构造函数而不是具体类的构造函数。 你是如何实现这一目标的? 改变class级关系的建议是有效的。 编辑:具体示例是ConcreteClass1和CustomizedClass1具有不同的数据集(ConcreteData1和CustomizedData1),并从类的构造函数中的数据库中检索它。 问题是创建CustomizedClass1的实例将检索两个数据实体。 我知道使用简单的inheritance可能不是最好的事情,这就是为什么我指出改变类关系的建议是有效的。

Smalltalk相当于Java的静态是什么?

什么是Java的静态字段和方法的Smalltalk等价物? IOW,Smalltalkers在需要类级数据和/或方法时会做些什么?

简单工厂和工厂方法模式的动机

我知道有很多关于不同工厂模式的差异的问题,但答案是如此不同和令人困惑。 我读过的书籍使用不清楚和(简化)简化的例子。 即使在阅读了维基百科的解释之后,我也有很多问题,以及关于它们的大量在线解释,包括所有这些网站上的解释。 我正在阅读的这本书是Head First Design Patterns。 在Simple Factory中,客户端使用单独的类(Creator)和工厂方法(可以是静态的)来返回Products。 在工厂方法模式中,创建者和客户端是相同的东西,他们在同一个类中使用抽象方法来创建新的产品,它们在同一个类中运行。 当然,造物主(或客户)是抽象的,因此关于制作混凝土产品的决定被推迟到子类。 我的理解是否正确(例如,FMP中的客户端和创建者是相同的,我从未在FMP图中看到客户端)? 在Factory Method Pattern中,它表明create方法不能在Creator之外重用,所以它只能在创建一个新的Creator时重用? 有什么情况我可以选择一个而不是另一个? (PS请不要将此标记为重复,我想在此网站上明确这一点)

Java,无法降低从对象inheritance的方法的可见性

继续这个问题: 为什么不能降低Java子类中方法的可见性? 我需要创建几乎与A类相同的B类,除了B不能做A可以做的某些事情。 作为一个懒惰的程序员,我试图inheritanceA ,只是为了迎接错误, B不能降低A方法的可见性。 咄!.. 现在A是来自供应商的API,我的目的是封装此API,以便更容易使用。 我想知道解决这个问题的最佳做法是什么?

Java中的对象变量与类变量

我正在学习Java,我不理解对象变量和类变量之间的区别。 我所知道的是,为了使它成为一个类变量,你必须先用静态语句声明它。 谢谢!

与Java的公共领域有什么关系?

我一直在javaworld.com上阅读两篇文章(1) (2) ,关于所有类字段应该是私有的,getter / setter方法也同样糟糕。 对象应该对其拥有的数据起作用,而不是允许访问它。 我目前正在为Connect Four进行大学任务。 在设计程序时,玩游戏的代理商需要访问董事会的状态(因此他们可以决定要移动的内容)。 他们还需要将这一举动传递给游戏,以便将其作为合法举措进行validation。 在决定移动内容时,将片段分组为具有起点和终点的威胁。 Board,Threat和Point对象实际上并没有做任何事情。 它们只是用于存储可以以人类可读方式访问的相关数据。 在设计之初,我将板上的点表示为两个元素int数组,但是在创建点或引用它们的组件时会很烦人。 所以,class级: public class Point { public int x; public int y; public Point(int x, int y){ this.x = x; this.y = y; } } 我能想到的各方面都很完美。 除了它打破了我学到的每一条规则。 我犯了罪吗?