我怎样才能在Java中扩展函数而不是整个类?

时间:2011-09-14 11:17:04

标签: java oop

如何只在Java中扩展函数? (不是课程延伸)

/*Example: 
 * year 1990 Alex Kumar 
 * year 1990 Jhon Ya'ay 
 * made this: do not touch modify here */
public static void OldMade()
{
    Connect("+1800PIZZA");        
    Say("MYID:69"); 
    Request("PIZZACITROEN_BLACK");
}

/*Example: 
 * year 2011 Sunil Williams
 * applied which extends 1990 */
public static void MadeInIndia extends this.OldMade
{
    //hidden include Connect("+1800PIZZA");        
    //hidden include Say("MYID:69"); 
    //hidden include Request("PIZZACITROEN_BLACK");
    Send("CorrectionPandit"); 
}

private static void main(Strig args[])
{
    // Try 1 call and get old + new
    MadeInIndia();        

    //execute  Connect("+1800PIZZA");        
    //execute  Say("MYID:69"); 
    //execute  Request("PIZZACITROEN_BLACK"); 
    //execute  Send("CorrectionPandit");
}

6 个答案:

答案 0 :(得分:7)

无法完成。 Java的面向对象;您只能从类和接口继承和扩展。

您没有“扩展”静态方法。在下面的安排中,B类的foo的静态版本将掩盖A的静态版本。如果B需要调用A的静态方法,它可以明确地这样做:

public class A {

    public static void foo() { System.out("foo for A classes"); }
}

public class B extends A {

    public static void foo() { System.out("foo for B classes"); }
}

答案 1 :(得分:2)

您无法扩展功能。为什么不写:

public static void MadeInIndia extends this.
{
    OldMade();
    Send("CorrectionPandit"); 
}

答案 2 :(得分:1)

扩展静态方法(从您的示例中),您只需调用原始方法:

 public static void MadeInIndia {
   OldMade();
   Send("CorrectionPandit"); 
 }

答案 3 :(得分:0)

仅仅因为继承只以这种方式定义,所以你不能覆盖方法。 超类的概念是将一般行为置于超级类型。 而你的子类与那个超类的类型相同。 如果您需要子类中的某些特定行为,则覆盖超类方法并根据子类要求进行更改。

答案 4 :(得分:0)

如果您考虑inheritance - 其主要目的是允许child类添加parent类的属性和行为。除了添加或扩展,child类也可以选择覆盖。由于覆盖对属性没有多大意义,因此它主要用于方法。另请注意,当您重写方法时,您几乎重写了整个逻辑,或者调用super.method()然后执行某些操作。

现在,如果您要尝试并将相同的概念应用于方法 - 您会发现在面向对象语言的情况下它确实没有多大意义。方法始终仅封装行为。属性与方法无关。因此,通过扩展,您只需要重写整个逻辑,或者按照super.method()的方式执行某些操作。

但是,对于像Haskell,Scala或Javascript这样的函数式编程语言,所有这些都是有意义的。这是因为这些语言认为functions是一等成员 - 这意味着,您可以仅使用函数编写程序,而无需任何类。在这些语言中,您会发现函数继承可以某种形式提供。

答案 5 :(得分:0)

你无法扩展方法;它违背了OOP概念。

您可以通过以下两种方式实现该功能 -

public static void OldMade()
{
    Connect("+1800PIZZA");        
    Say("MYID:69"); 
    Request("PIZZACITROEN_BLACK");
}

public static void MadeInIndia extends this.OldMade
{
    OldMade();
    Send("CorrectionPandit"); 
}

private static void main(Strig args[])
{
    MadeInIndia();
}

public static void OldMade()
{
    Connect("+1800PIZZA");        
    Say("MYID:69"); 
    Request("PIZZACITROEN_BLACK");
}

/*public static void MadeInIndia extends this.OldMade
{
    OldMade();
    Send("CorrectionPandit"); 
}*/

private static void main(Strig args[])
{
    //MadeInIndia();
    OldMade();
    Send("CorrectionPandit"); 
}