Tag: abstract class

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

我创建了一个抽象类来防止我的每个活动中出现冗余代码。 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文件中添加/重命名您的应用程序:

Java 8中接口和抽象类之间的根本区别

考虑到接口现在可以为它提供的方法提供实现,我无法正确理解接口和抽象类之间的差异。 有谁知道如何正确解释差异? 我还被告知,与抽象类相比,接口稍微更轻,性能明智。 有人可以证实吗?

在抽象类中使用main方法

我知道在抽象类中使用main方法是合法的,因为Eclipse允许我执行以下操作并将该类作为java应用程序运行。 但做这样的事情有意义吗? 是否存在一个真实的场景,需要在抽象类中使用main方法? public abstract class Automobile { public Boolean powerOn() { // generic implementation for powering on an automobile return true; } public void move() { // generic implementation for move } public void changeDirection(String newDir) { // generic implementation for changing direction } public abstract void accelerate(Integer changeInSpeed); public abstract Integer refuel(Integer inputFuel); […]

如果没有抽象成员,基类应该标记为抽象吗?

如果一个类没有抽象成员,那么它是否可以被标记为抽象? 即使没有直接实例化的实际理由呢? (除了unit testing)

带抽象参数和inheritance的Java抽象方法

我最近遇到了一个API和一个实现的问题,其中出现了以下类型的代码: API是一个抽象类: public abstract class A { public A sum(A a) { System.out.println(“A.sum(A) called”); return null; } } 实现是一个简单的类: public class B extends A { public B sum(B b) { System.out.println(“B.sum(B) called”); return null; } } 说到使用它我写道: public class Main { public static void main(String args[]) { B b = new B(); A basa = […]

如何创建“抽象领域”?

我知道java中不存在抽象字段。 我也读过这个问题,但提出的解决方案并不能解决我的问题。 也许没有解决方案,但值得问:) 问题 我有一个抽象类,它根据其中一个字段的值在构造函数中执行操作。 问题是该字段的值将根据子类而改变 。 我该怎么做才能对子类重新定义的字段的值进行操作? 如果我只是“覆盖”子类中的字段,则对抽象类中字段的值进行操作。 我对任何可以确保在子类实例化期间完成操作的解决方案持开放态度 ( 即将操作放在构造函数中每个子类调用的方法中都不是有效的解决方案,因为有人可能会扩展抽象类并忘记调用方法)。 另外,我不想将字段的值赋予构造函数的参数。 有没有解决办法,或者我应该改变我的设计? 编辑: 我的子类实际上是我的主程序使用的一些工具,因此构造函数必须是公共的并且完全采用它们将被调用的参数: tools[0]=new Hand(this); tools[1]=new Pencil(this); tools[2]=new AddObject(this); (子类是Hand,Pencil和AddObject,它们都扩展了抽象类Tool) 这就是为什么我不想改变构造函数。 我即将使用的解决方案是将上面的代码稍微更改为: tools[0]=new Hand(this); tools[0].init(); tools[1]=new Pencil(this); tools[1].init(); tools[2]=new AddObject(this); tools[2].init(); 并使用抽象的getter访问该字段。

复制抽象类的构造函数

我有一个名为AClass的抽象类。 在同一个包中我有AnotherClass ,其中我有一个AClass对象的ArrayList 。 在AnotherClass的复制构造函数中,我需要在ArrayList复制AClass对象。 问题: 我不能在AClass创建一个复制构造函数,因为它是一个抽象类,我不知道将由AClassinheritance的类的名称。 实际上,在这个项目中,没有对象会从这个类inheritance,但是这个项目将被其他项目用作库,这些项目将提供一个AClass类。 我的设计中是否有错误或是否有解决此问题的方法? 编辑 :这里是一些代码: public class AnotherClass{ private ArrayList list; … /** Copy constructor */ public AnotherClass(AnotherClass another){ // copy all fields from “another” this.list = new ArrayList(); for(int i = 0; i < another.list.size(); i++){ // Option 1: this.list.add(new AClass(another.list.get(i))); // problem: cannot instantiate AClass as it […]

如何声明一个抽象方法,以便参数类型(类)始终是Children类?

编辑:见底部 首先我在问这个问题之前搜索了一个答案,但正如你可以看到标题我不知道如何调用它,我会尽可能地编辑问题。 请原谅我这个。 我有以下抽象类: public abstract class ValidableDTO implements Serializable { public abstract boolean isValid(); public abstract boolean equals(ValidableDTO compared); // EDIT : new solution public abstract boolean equals(T compared); } 我想得到一个类似的实现: public class MyDTO extends ValidableDTO { private String myValue; //With a getter and setter of course public MyDTO() { // … } @Override […]

java强制扩展类

在Java中,我可以以某种方式强制扩展抽象类的类来实现其构造函数,并将Object作为参数吗? 就像是 public abstract class Points { //add some abstract method to force constructor to have object. } public class ExtendPoints extends Points { /** * I want the abstract class to force this implementation to have * a constructor with an object in it? * @param o */ public ExtendPoints(Object o){ } }

@MustOverride注释?

在.NET中,可以为特定超类中的方法指定“mustoverride”属性,以确保子类覆盖该特定方法。 我想知道是否有人有一个可以达到同样效果的自定义java注释。 基本上我想要的是推动子类覆盖超类中的方法,该超类本身具有必须贯穿的逻辑。 我不想使用抽象方法或接口,因为我希望在super方法中运行一些常用function,但或多或​​少会产生编译器警告/错误,表示派生类应该覆盖给定方法。