2010-07-08 71 views
2

我有类A,方法foo和bar,由A1和A2实现。 A1和A2的功能都是一样的。换句话说:静态方法通过虚拟实现调用派生类型? (Android)

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中,所有非最终/非私有都被认为是虚拟的,对吗?)

根据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(); } 
    } 

这是它应该如何“应该”?我完全意识到我可能会误解文档中的这一段。

+1

在上一个代码示例中,是否将'class A'中的方法声明为'public static int'? – mob 2010-07-08 17:51:20

回答

2

在基类中为方法打包是没有意义的,因为无论如何它们都会出现在派生类中。

关于Android网站的性能提示 - 他们的意思是让方法成为静态的,如果你发现它的主体不指向任何非静态的字段或方法。这将消除在内部传递this指针的开销。

无论如何,为了调整你的应用程序在如此细致的级别上的性能,你必须有一个证明(通过分析)确切地说这种方法导致了一个减速。优化代码的随机部分,即使是基于猜测,也是浪费时间。

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()方法自动。

现在不要担心优化问题,关注良好的面向对象编程,如果它很慢回来并在完成后优化问题区域。

相关问题