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