Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中只扩展函数而不是扩展整个类?_Java_Oop - Fatal编程技术网

如何在Java中只扩展函数而不是扩展整个类?

如何在Java中只扩展函数而不是扩展整个类?,java,oop,Java,Oop,如何仅在Java中扩展函数?(不是类扩展) 要扩展静态方法(如示例所示),只需调用原始方法: public static void MadeInIndia { OldMade(); Send("CorrectionPandit"); } 不行。Java的面向对象;只能从类和接口继承和扩展 您不能“扩展”静态方法。在下面的安排中,B类的foo的静态版本将掩盖A的静态版本。如果B需要调用A的静态方法,它可以显式地这样做: public class A { public

如何仅在Java中扩展函数?(不是类扩展)

要扩展静态方法(如示例所示),只需调用原始方法:

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

不行。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"); }
}

你不能扩展一个函数。为什么不写:

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

因为继承仅以这种方式定义,所以不能重写方法。 超类的概念是将一般行为置于超级类型。 你们的子类和那个超级类是同一类型的。
若您需要子类中的某些特定行为,那个么重写超类方法并根据子类的要求对其进行更改继承> /代码>,其主要目的是允许<代码>子< /代码>类添加到<代码>父< /代码>类的属性和行为。除了添加或扩展外,
子类
还可以选择重写。由于重写对属性没有多大意义,因此它主要用于方法。还要注意的是,当您重写方法时,您几乎要重写整个逻辑,或者调用
super.method()
,然后再执行一些操作

现在,如果您尝试将相同的概念应用到方法中,您将看到,对于面向对象语言来说,这真的没有多大意义。方法总是只封装行为。属性与方法不关联。因此,通过扩展,您只能重新编写整个逻辑,或者按照
super.method()
的思路进行操作


然而,对于像Haskell、Scala或Javascript这样的函数式编程语言来说,所有这些都是有意义的。这是因为这些语言认为函数是第一类成员,意思是,你可以只使用函数编写程序,而不需要任何类。在这样的语言中,您会发现函数继承可以以某种形式提供。

您无法扩展方法;这与面向对象的概念背道而驰

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

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


不。你可以扩展这个类,只覆盖你想“扩展”的单个方法。什么是只覆盖一个方法,而不是扩展类?你说的就像你可以用其他语言扩展函数一样。我只说Java。不要推断其他语言的情况。我认为没有这样的事情。为了澄清“遮蔽”:静态方法没有基于运行时类型的方法分派:
ab=newb();b、 foo()。
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"); 
}