Tag: oop

为什么对接口的引用数组可以包含实现该接口的类?

我已经阅读了许multithreading来解释接口和抽象类之间的差异; 这些post特别有用: 接口和抽象类有什么区别? 和接口与抽象类(通用OO) ; 但是,我找不到任何专门解决我问题的答案。 上下文:今天在课堂上我们编写了一个接口和两个实现接口的类: public interface Animal{ // This is in its own file void move(); void makeSound(); } class Dog implements Animal{ // The rest of these are in another file public void move(){ System.out.println(“Runs.”); } public void makeSound(){ System.out.println(“Barks.”); } } class Fish implements Animal{ public void move(){ System.out.println(“Swims.”); } […]

数字系统类的inheritance层次结构

对于数学表达式的符号表示,我试图构建数字系统类的层次结构。 除了Integer和Real ,我还需要像Rational和Complex这样的类。 我希望所有这些类能够相互无缝地互操作。 例如,将Complex添加到Integer将给出Complex等。 我让所有这些都实现了Number接口。 (不是java.lang.Number ) 为了能够添加不同类型的数量,我尝试制作如下的层次结构。 Integer扩展Rational扩展Real扩展Complex 这使得Integer不必要地存储虚部等。这种开销是不希望的。 允许访问Integer虚部也似乎是不合适的。 任何人都可以建议一个更好的设计,避免开销,仍然可以进行互操作吗?

使用级联函数调用设计API(Class.doThis(“…”)。doThat(“…”)…)

我已经看到一些API的设计方式必须使用它们,如下面的代码 Class.doThis(“…”).doThat(“…”)….. 例如,HTTPCommon(Fluent API)可用作: Request.Get(“http://somehost/”) .connectTimeout(1000) .socketTimeout(1000) .execute().returnContent().asString(); 石英计划可用作: JobDetail job = newJob(HelloJob.class) .withIdentity(“job1”, “group1”) .build(); SimpleCatptch可用作: Captcha captcha = new Captcha.Builder(200, 50) .addText() .addBackground() .addNoise() .gimp() .addBorder() 这种API设计的名称是什么? 这样的设计好吗?

带inheritance的工厂方法模式的好方法

假设我有以下类层次结构: class abstract Parent{} class FirstChild extends Parent {} class SecondChild extends Parent {} 我想从每个孩子创建DTO对象: class abstract ParentDTO {} class FirstChildDTO extends ParentDTO{} class SecondChildDTO extends ParentDTO{} 我想我需要一个像这样的工厂方法: ParentDTO createFrom(Parent source); 有没有很好的方法在没有instanceof检查和if / else语句的情况instanceof在Java中执行此操作? 编辑 :此工厂方法不起作用: public ParentDTO create(Parent source) { return _create(source); } private FirstChildDTO _create(FirstChild source) { return new FirstDTO(); } private SecondChildDTO […]

为什么Java缺少访问权限说明符?

有谁知道为什么缺少Java: 一个访问说明符,允许类和所有子类访问,但不允许同一个包中的其他类访问? (保护-负) 一个访问说明符,允许类访问,同一个包中的所有类,以及任何子包中的所有类? (默认加) 一个访问说明符,它将子包中的类添加到当前允许受保护访问的实体中? (被保护的加) 我希望我有更多选择而不是保护和默认。 特别是,我对Protected-plus选项很感兴趣。 假设我想使用Builder / Factory图案类来生成一个具有许多指向其他对象的链接的对象。 对象上的构造函数都是默认的,因为我想强制您使用工厂类来生成实例,以确保正确完成链接。 我想将工厂分组在一个子包中,以便将它们保持在一起并与它们实例化的对象区别开来 – 这对我来说似乎是一个更清洁的包结构。 目前无法做到。 我必须将构建器放在与它们构造的对象相同的包中,以获得对默认值的访问。 但是将project.area.objects与project.area.objects.builders分开会非常好。 那么为什么Java缺乏这些选择呢? 并且,无论如何要伪造它?

Java中重写方法的更宽泛的参数类型

以下代码打破了OO原则? 不是Java OO原则,而是一般的OO原则。 class GeneralArg{} class Arg extends GeneralArg{} class A{ public void test(Arg a){} } class B extends A{ @Override public void test(GeneralArg a){} } 我认为这应该有效! 但是有一个编译错误,说B.test()不会覆盖B.test() A.test()

抽象类去除活动中的冗余代码

我创建了一个抽象类来防止我的每个活动中出现冗余代码。 public abstract class MyGeneralizedActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } @Override public void attachBaseContext(Context newBase) { super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); } //… } 这样做我完全没问题: public class MyActivity extends MyGeneralizedActivity{…} 但现在我已经到了必须从FragmentActivity扩展MyActivity 。 这意味着我不能再从MyGeneralizedActivity扩展。 现在我想知道是否可以设置一个通用的抽象结构来扩展我的所有活动。 编辑 只是通过从FragmentActivity扩展MyGeneralizedActivity不会解决我的问题。 例如TabActivity会导致同样的问题。 UPDATE 对于那些可能有兴趣在Android中解决同样问题的人,我找到了一个简单的解决方法。 存在Application类,其中提供了ActivityLifecycleCallbacks接口等。 它完全符合我的需要,允许我们拦截并为所有活动的重要事件添加一些价值。 您所要做的就是扩展Android Application类并创建一个实现ActivityLifecycleCallbacks的私有类。 不要忘记在AndroidManifests文件中添加/重命名您的应用程序:

方法是否重载了一种多态?

我正在研究静态和动态多态,并得到这些链接: http://guruzon.com/1/oop-concepts/polymorphism/what-is-polymorphism-example-tutorial-uml-diagram-notation http://www.coderanch.com/t/379004/java/java/static-polymorphism-dynamic-polymorphism http://javarevisited.blogspot.in/2011/08/what-is-polymorphism-in-java-example.html 在所有这些链接中,有人说过载是多态的一个例子,然后我遇到了另外两个地方,据说重载与多态无关,链接是: 方法重载是多态吗? Head First Java第2版第7章(inheritance和多态)上一主题:重载方法 。 现在我无法弄清楚它是否是一种多态性,如果它不是OOP中有什么称为静态多态的话?

如何在所有子构造函数中自动包含父方法的执行?

我有一个抽象类( Parent ),它有一个抽象方法( doSetup ),以及一个调用doSetup方法的成员方法。 我需要的是构造中的子类(实现Parent )应该自动调用doSetup方法,无论子类可能有多少构造函数。 是否有Java机制或设计模式可以帮助我解决这个问题? public abstract class Parent { abstract protected void sayHi(); protected void doSetup() { sayHi(); } } public class Child1 extends Parent { @Override protected void sayHi() { System.out.println(“hi”); } public Child1() { // Construction needs to automatically include exec of doSetup() } public Child1(String string) { // […]

无状态对象良好做法与否

这是我对无状态对象的理解:从没有类变量的类创建的任何对象都是无状态对象。 我的问题是我们应该何时编写无状态类。 拥有无状态对象是一个好习惯。