我有A类,方法是foo和bar,由A1和A2实现。 A1和A2的功能相同。换句话说:
public class A {
public int foo() { return 0; };
public int bar() { return 1; };
}
class A1 extends A {
public int AnotherFooFunction() { return foo(); }
public int AnotherBarFunction() { return bar(); }
}
class A2 extends A {
public int AnotherFooFunction() { return foo(); }
public int AnotherBarFunction() { return bar(); }
}
以这种方式保持代码或将这些虚拟方法换成静态方法更好吗? (在Java中,所有非final / non-private都被认为是虚拟的,对吗?)
根据Android Developer Docs中的Designing for Performance部分,我应该将这些虚拟方法替换为静态方法。所以上面变成了:
public class A {
public int foo() { return 0; };
public int bar() { return 1; };
}
class A1 extends A {
public int AnotherFooFunction() { return A.foo(); }
public int AnotherBarFunction() { return A.bar(); }
}
class A2 extends A {
public int AnotherFooFunction() { return A.foo(); }
public int AnotherBarFunction() { return A.bar(); }
}
这是“它应该”的样子吗?我完全意识到我可能在文档中误解了这一段。
答案 0 :(得分:2)
为基类中的方法创建包装器没有意义,因为无论如何它们都将出现在派生类中。
关于来自Android网站的性能提示 - 如果您发现它的主体没有引用任何非静态字段或方法,那么它们的意思是使方法保持静态。这将消除内部传递this
指针的开销。
无论如何,为了在这种细粒度级别上调整应用程序的性能,你必须有一个证明(通过分析)这个方法正好导致速度减慢。优化代码的随机部分,即使它是基于猜测,也是浪费时间。
答案 1 :(得分:0)
这是您的最佳选择
public abstract class A {
public int foo() { return 0; };
public int bar() { return 1; };
}
class A1 extends A {
}
class A2 extends A {
}
A1和A2自动继承foo()和bar()方法。
现在不要担心优化,专注于良好的面向对象编程,如果速度慢,请在完成后优化问题区域。