Java 解释动态绑定和静态方法

Java 解释动态绑定和静态方法,java,Java,我对私有方法可以是静态的,而公共方法必须是动态绑定的有点困惑。动态绑定意味着在运行时决定运行哪种代码。这是多态性的基础 Public、package access和protected方法是动态绑定的。子类可以重写这些方法并提供替代实现。私有方法不能被重写,因此它们不需要动态绑定 静态方法没有动态绑定(线索在名称中)因为它们是在类本身上定义的,而不是对每个对象都是唯一的。静态方法是类级方法,因此只能通过类名访问,但方法必须是公共的。1。在类多态性中,子类的对象引用变量作为参数传递 指向接受参数的方

我对私有方法可以是静态的,而公共方法必须是动态绑定的有点困惑。

动态绑定意味着在运行时决定运行哪种代码。这是多态性的基础

Public、package access和protected方法是动态绑定的。子类可以重写这些方法并提供替代实现。私有方法不能被重写,因此它们不需要动态绑定


静态方法没有动态绑定(线索在名称中)因为它们是在类本身上定义的,而不是对每个对象都是唯一的。

静态方法是类级方法,因此只能通过类名访问,但方法必须是公共的。

1。类多态性中,子类的对象引用变量作为参数传递 指向接受参数的方法,该参数是类型为的对象引用变量 超类
公共、受保护和默认成员可以动态绑定
私有成员不能动态绑定 不是继承的

2.静态成员用于类,且其未绑定到任何单个对象,因此其
动态绑定。

如果在
private
方法中不需要
this
引用,也可以将其设置为
静态
,并且不会产生任何差异。
private
方法在这两种情况下都不需要动态绑定,因此在实现级别上,它与您使用的hoose。但是,当您标记方法时,它有助于可读性。从那时起,方法显然不依赖于对象的状态。

动态绑定或后期绑定

动态绑定是指编译器无法解析调用,而绑定仅在运行时完成的情况。让我们试着理解一下。假设我们有一个名为
超类
的类,另一个名为
子类
的类扩展了它。现在可以将
超类
引用分配给该类型的对象
子类也一样。如果我们有一个方法(比如
someMethod()
)在
超类
中,我们在
子类
中重写了该超类
,然后对
超类
引用调用该方法只能在运行时解决,因为编译器无法确定该引用在运行时指向的对象类型

...
SuperClass superClass1 = new SuperClass();
SuperClass superClass2 = new SubClass();
...

superClass1.someMethod(); // SuperClass version is called
superClass2.someMethod(); // SubClass version is called
....
这里,我们看到,即使对象引用
superClass1
superClass2
仅属于类型
SuperClass
,但在运行时它们分别引用类型为SuperClass和
SubClass
的对象

因此,在编译时,编译器无法确定对这些引用的方法
someMethod()
的调用是否实际引用了该方法的哪个版本-超类版本还是子类版本

因此,我们看到Java中的动态绑定只是基于实际对象类型而不是对象引用的声明类型绑定方法调用(继承的方法只能在子类中重写,因此编译器可能不确定要调用的方法的哪个版本)


静态绑定或早期绑定

如果编译器只能在编译时解析绑定,那么这种绑定称为静态绑定或早期绑定。所有实例方法调用总是在运行时解析,但所有静态方法调用都是在编译时解析的,因此静态方法调用有静态绑定。因为静态方法是class方法,因此可以使用类名本身来访问它们(事实上,它们只能使用它们相应的类名,而不能使用对象引用)因此,只有使用编译时类型信息才能在编译时解析对它们的访问。这就是为什么静态方法实际上不能被重写的原因。请阅读更多-

对Java中所有成员变量的访问遵循静态绑定,因为Java不支持(事实上,它不鼓励)成员变量的多态行为


[除了这个讨论之外,您不能覆盖Java中的静态(如上链接所述)、私有和最终方法。]

您的问题不清楚(至少对我来说),您可以添加更多详细信息吗?修饰符
private
public
protected
表示可见性。它们与绑定无关。您的问题是什么意思?我同意ThinkStip。在发布此类问题时,最好至少包含每个案例的一个示例代码片段(这里有3个代码段,您正在尝试做什么,但不起作用,静态情况和动态情况)。您提供的示例和详细信息越多,您将得到的答案质量越好。这是针对我正在学习的类的,这基本上是一个问题,没有代码片段+1这是正确的答案。动态性在运行时是有界的,静态方法隐藏实现。静态方法不必是公共的,但如果它们是私有的,则它们是私有的只能由同一类的其他静态方法访问。。。