「动态类型绑定java」什么是多态性和动态绑定
本篇文章给大家谈谈动态类型绑定java,以及什么是多态性和动态绑定对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java里的interface接口类怎么用?
- 2、java 中什么是动态绑定!
- 3、那个,有点不太明白java里的动态绑定,他说是根据引用的对象的实际类型来调用方法
- 4、关于JAVA多态性的一些疑问(动态绑定是啥回事?)
java里的interface接口类怎么用?
Java不支持多重继承,即一个类只能有一个父类
为了克服单继承的缺点,Java使用了接口,一个类可以实现多个接口
接口是抽象方法和常量值定义的集合,是一种特殊的抽象类
接口中只包含常量和方法的定义,没有变量和方法的实现
接口中的所有方法都是抽象的
接口中成员的访问类型都是public
接口中的变量默认使用public static final标识(可以在定义的时候不加此修饰,系统默认)
接口通过使用关键字interface来声明
格式:interface 接口的名字
1, 实例方法与引用变量实际引用的对象的方法绑定,这种绑定属于动态绑定,因为是在运行时由Java虚拟机
动态决定的
2, 静态方法与引用变量所声明的类型的方法绑定,这种绑定属于静态绑定,因为实际上是在编译阶段就已经
绑定
3, 成员变量(静态变量,实例变量)与引用变量所声明的类型的成员变量绑定,这种绑定属于静态绑定,因为
实际上是在编译阶段就已经绑定
java 中什么是动态绑定!
动态绑定只是叫法不同,你可以理解为多态!
例如,有一个抽像fruit水果父类,其中定义了一个方法抽像eat方法,而apple继承fruit并实现fruit的eat方法,而banana继承fruit并实现fruit的eat方法,
外部调用代码如下:
public void do(Fruit fruit){
fruit.eat();//这里就是动态绑定只有在运行时才知道调用哪一个子类的eat()
}
main(){
do(new Apple());
do(new Banana());
}
那个,有点不太明白java里的动态绑定,他说是根据引用的对象的实际类型来调用方法
通过基类引用只能调用基类有的方法
基类有的方法,子类一定都有。但是子类这个方法的行为可能跟基类的同名方法不一样。这是由子类的实现者决定的
如果子类的实现者选择让子类的 enjoy() 方法跟基类的 enjoy() 方法的行为不一样,就说子类“覆写”( override )了这个方法
关于JAVA多态性的一些疑问(动态绑定是啥回事?)
一、多态的概念多态即“一个接口,多种实现”,在父类中声明的方法,可以在子类中进行覆盖(声明为finial的除外),这样,父类的引用在引用子类对象的时候可以做出不同的响应。所以,多态也可以说成是:相同的消息被发送到子类或父类对象上,将导致完全不同的行为。多态允许将子类的对象当作父类的对象使用,某父类型的引用指向其子类型的对象,调用的方法是该子类型的方法。这里引用和调用方法的代码编译前就已经决定了,而引用所指向的对象可以在运行期间动态绑定。二、多态存在的条件1、必须存在继承关系。2、子类必须覆盖父类中声明过的方法。三、java多态的实现机制java多态是由动态绑定技术来实现的,动态绑定即运行时绑定(以之对应的有静态绑定,即编译时绑定),在java语言中,除了声明为finial的方法外(声明为private的方法默认为finial)其余都是采用动态绑定来调用的,过程如下:当程序运行时,需要动态的调用方法时,则是虚拟机的工作,虚拟机将依照具体环境首先拟定出一张方法表,列举出可能的方法调用,继而在实现调用的时候,可以节省寻找函数方法所带来的时间开销,其将调用最合适及最合理的方法,在派生类中能调用相应的重名函数的则调用该新方法,不能则调用超类(父类)方法,同时应注意一点,若虚拟机放弃对本类的相应方法调用,那么虚拟机将搜索超类的方法表,依次类同,若都没有相应的处理来响应,则程序运行出错,一般来说在编译阶段,编译器将作出相应的控制。下面我们来看看动态绑定的内部实现机制。JAVA虚拟机调用一个类方法时,它会基于对象引用的类型(通常在编译时可知)来选择所调用的方法。相反,当虚拟机调用一个实例方法时,它会基于对象实际的类型(只能在运行时得知)来选择所调用的方法,这就是动态绑定。在编译阶段,编译器会为制造两种表,一种叫做方法表,一种叫做常量表。方法表以数组的形式记录了当前类及其所有超类的可见方法字节码在内存中的直接地址。此表有两个特点::(1) 子类方法表中继承了父类的方法。 (2) 相同的方法(相同的方法签名:方法名和参数列表,即被覆盖的方法)在所有类的方法表中的索引相同。而常量表(CONSTATN_Methodref_info ) 记录的是被调用方法信息的符号引用(包括方法所在的类名,方法名和返回类型)。详细调用过程如下:(1)JVM首先根据常量表中的符号所引找到调用方法的全额限定名(要用多态机制的话,一般是用基类来声明引用)。(2)在基类的方法表中查找到调用方法,如果找到,则将此方法在基类方法表中的索引记录到常量表中。这里要注意,这里必须要基类中有此方法的定义,如果没有,及时子类中存在,编译器也会报错。(3)根据(2)中记录到常量表中的索引找到子类中的响应方法。四、多态的作用1、 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。//继承2、 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。 //多态的真正作用,以前需要用switch实现
动态类型绑定java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于什么是多态性和动态绑定、动态类型绑定java的信息别忘了在本站进行查找喔。