当前位置: 首页 > 知识库问答 >
问题:

动态绑定java测试

龙嘉誉
2023-03-14
public class Customer { }

public class RegisteredCustomer extends Customer{}

public class Shop {
    public int computeDiscount(Customer c){return 0;}
}

public class OnlineShop extends Shop {
    public int computeDiscount(Customer c){return 5;}
    public int computeDiscount(RegisteredCustomer c){return 15;}
}


public class OnlinePremiumShop extends OnlineShop{
    public int computeDiscount(RegisteredCustomer c){return 20+super.computeDiscount(c);}
}


public static void main(String[] args) {
        RegisteredCustomer c3 = new RegisteredCustomer();
        Shop s2 = new OnlinePremiumShop();
        System.out.println(s2.computeDiscount(c3));
}

如果c3既是动态类型又是静态类型RegisteredCustomer,为什么java用Customer参数捕获方法?我想我被绑定弄糊涂了..什么是思考不出错的过程

共有1个答案

危砚
2023-03-14
Shop s2 = new OnlinePremiumShop();

这里创建一个OnlinePremiumShop对象,并将其分配给Shop类型的引用。在shop中,声明的唯一方法是:

    public int computeDiscount(Customer c){return 0;}

因此,当调用s2.computeDiscount()时,必须调用接受customer参数的参数。由于具体类型OnlinePremiumShop重写此方法,因此调用该方法,结果为5

S2不知道computedsicount()中接受RegisteredCustomer参数的任何版本,因此无法绑定到子类中的该版本。

 类似资料:
  • 起初我是一个初学者 我看过很多教程,读过很多例子,甚至试图从JLS来理解这个主题,但我仍然有一些困惑或误解。 让我给你看我看不懂的问题。

  • 问题内容: 我对动态绑定和静态绑定感到非常困惑。我已经读过,在编译时确定对象的类型称为静态绑定,而在运行时确定它的称为动态绑定。 下面的代码会发生什么: 静态绑定还是动态绑定? 这表明什么样的多态性? 问题答案: 您的示例是 动态绑定 ,因为在运行时确定类型是什么,并调用适当的方法。 现在假设您也具有以下两种方法: 即使您更改为 这将打印出来,因为对的调用使用 静态绑定 ,并且编译器仅知道其类型。

  • 静态绑定还是动态绑定? 这显示了什么样的多态性?

  • 问题内容: 我目前正在为我的一个类进行分配,在其中,我必须使用Java语法给出 静态 和 动态绑定的 示例。 我了解基本概念,即静态绑定在编译时发生,而动态绑定在运行时发生,但是我无法弄清楚它们实际上是如何工作的。 我找到了一个在线静态绑定的示例,给出了以下示例: 并且这将显示“ animal is eating”,因为 对的调用使用了静态绑定,但是我不确定 为什么 将其视为静态绑定。 到目前为止

  • 问题内容: 我正在为测试做练习,并且遇到了有关重载以及静态和动态绑定的练习。询问以下代码的输出: 我 认为 我获得了第一个,但在其他方面我完全迷失了。这是我解决第一个问题的方法: 在运行时,类型为,因此我们调用Curly的print方法。由于我们传递了要打印的类型的对象,因此在中运行了具有参数类型的相应打印方法。该方法的输出为,正确答案。 但是,当我将这种技术应用于以下几行时,我得到的答案是错误的

  • 请有人给我解释一下输出的最后6行是如何打印出来的。我知道,由于静态绑定,前三行打印适当。 我不知道为什么第5行给出了输出,因为它是Ipod类型的,它没有任何歌曲方法,但它仍然打印输出。代码如下: 输出如下所示: