2011-09-14 23 views
3

我该如何扩展Java中的函数? (未类扩展)如何在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"); 
} 
+1

号可以扩展类并覆盖只是想“扩展”的单一方法。 – Thilo

+0

这是什么意思只覆盖方法,而不是扩展类? –

回答

5

不能完成。 Java的面向对象;你只能继承和扩展类和接口。

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

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"); } 
} 
+0

你说它像你可以*扩展*在其他语言的功能。 – Andrey

+0

我只是在谈论Java。不要推断其他语言的事情。我以为没有这样的事情。 – duffymo

+0

澄清“阴影”:静态方法没有基于运行时类型的方法调度:'A b = new B(); b.foo()'可能不会做你认为它的做法(编译器会警告它)。 – Thilo

1

延长静态方法(如从你的例子),你只需要调用原来的方法:

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

不能扩展的功能。为什么不只是写:

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

只因为继承定义这种方式,所以你不能重写方法。 超类的概念是把普通行为放在超级类型。 而你的子类是那个超类的相同类型。 如果你在子类中需要一些特定的行为,那么重写超类方法并根据子类的需求进行更改。

0

如果您考虑inheritance - 其主要目的是允许child类添加parent类的属性和行为。除了添加或扩展child类之外,还可能选择覆盖。由于重写对属性没有多大意义,因此主要用于方法。还要注意,当你重写方法时,你几乎要重写整个逻辑,或者调用super.method()然后再做一些事情。

现在,如果您想要尝试并将相同的概念应用于方法 - 您会发现在面向对象语言的情况下它确实没有什么意义。方法总是仅封装行为。属性不与方法关联。因此,通过扩展,您只会重写整个逻辑,或者沿着super.method()的方向行事。

但是,如果像Haskell,Scala或Javascript那样使用功能性编程语言,所有这些都是有意义的。这是因为这些语言认为functions是第一类成员 - 也就是说,您可以仅使用函数编写程序,而不使用任何类。在这样的语言中,你会发现函数继承可以以某种形式或其他形式提供。

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"); 
} 
相关问题