我目前正在为我的一个类进行分配,在其中,我必须使用Java语法给出 静态 和 动态绑定的 示例。
我了解基本概念,即静态绑定在编译时发生,而动态绑定在运行时发生,但是我无法弄清楚它们实际上是如何工作的。
我找到了一个在线静态绑定的示例,给出了以下示例:
public static void callEat(Animal animal) {
System.out.println("Animal is eating");
}
public static void callEat(Dog dog) {
System.out.println("Dog is eating");
}
public static void main(String args[])
{
Animal a = new Dog();
callEat(a);
}
并且这将显示“ animal is eating”,因为 对的调用callEat
使用了静态绑定,但是我不确定 为什么 将其视为静态绑定。
到目前为止,我所见的任何资料都没有设法以我可以遵循的方式来解释这一点。
从Javarevisited博客文章:
这是静态绑定和动态绑定之间的一些重要区别:
- Java中的静态绑定发生在编译时,而动态绑定发生在运行时。
private
,final
以及static
方法和变量使用静态结合和由编译器所键合而虚拟方法基于运行时对象在运行期间接合。- 静态绑定使用
Type
(class
在Java中)信息进行绑定,而动态绑定使用对象来解析绑定。- 重载的方法使用静态绑定进行绑定,而重载的html" target="_blank">方法使用动态绑定在运行时进行绑定。
这是一个示例,可以帮助您理解Java中的静态和动态绑定。
Java中的静态绑定示例
> public class StaticBindingTest {
> public static void main(String args[]) {
> Collection c = new HashSet();
> StaticBindingTest et = new StaticBindingTest();
> et.sort(c);
> }
> //overloaded method takes Collection argument
> public Collection sort(Collection c) {
> System.out.println("Inside Collection sort method");
> return c;
> }
> //another overloaded method which takes HashSet argument which is
> sub class
> public Collection sort(HashSet hs) {
> System.out.println("Inside HashSet sort method");
> return hs;
> }
> }
输出 :内部集合排序方法
Java动态绑定示例
> public class DynamicBindingTest {
> public static void main(String args[]) {
> Vehicle vehicle = new Car(); //here Type is vehicle but object
> will be Car
> vehicle.start(); //Car's start called because start() is
> overridden method
> }
> }
>
> class Vehicle {
> public void start() {
> System.out.println("Inside start method of Vehicle");
> }
> }
>
> class Car extends Vehicle {
> @Override
> public void start() {
> System.out.println("Inside start method of Car");
> }
> }
输出: 汽车内部启动方式
起初我是一个初学者 我看过很多教程,读过很多例子,甚至试图从JLS来理解这个主题,但我仍然有一些困惑或误解。 让我给你看我看不懂的问题。
静态绑定还是动态绑定? 这显示了什么样的多态性?
请有人给我解释一下输出的最后6行是如何打印出来的。我知道,由于静态绑定,前三行打印适当。 我不知道为什么第5行给出了输出,因为它是Ipod类型的,它没有任何歌曲方法,但它仍然打印输出。代码如下: 输出如下所示:
问题内容: 我对动态绑定和静态绑定感到非常困惑。我已经读过,在编译时确定对象的类型称为静态绑定,而在运行时确定它的称为动态绑定。 下面的代码会发生什么: 静态绑定还是动态绑定? 这表明什么样的多态性? 问题答案: 您的示例是 动态绑定 ,因为在运行时确定类型是什么,并调用适当的方法。 现在假设您也具有以下两种方法: 即使您更改为 这将打印出来,因为对的调用使用 静态绑定 ,并且编译器仅知道其类型。
问题内容: 我正在为测试做练习,并且遇到了有关重载以及静态和动态绑定的练习。询问以下代码的输出: 我 认为 我获得了第一个,但在其他方面我完全迷失了。这是我解决第一个问题的方法: 在运行时,类型为,因此我们调用Curly的print方法。由于我们传递了要打印的类型的对象,因此在中运行了具有参数类型的相应打印方法。该方法的输出为,正确答案。 但是,当我将这种技术应用于以下几行时,我得到的答案是错误的