如何在java中使用动态绑定和静态绑定?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
java基本数据类型有哪些
java的基本数据类型分为:1,整数类型,用来表示整数的数据类型。2,浮点类型,用来表示小数的数据类型。3,字符类型,字符类型的关键字是“字符”。4,布尔类型,是表示逻辑值的基本数据类型。
<>强绑定强>
绑定:将一个方法的调用与方法所在的类(方法主体)关联起来。即决定调用哪个方法和变量。
在java中,绑定分为静态绑定和动态绑定。也叫作前期绑定和后期绑定。
<强>静态绑定强>
在程序执行以前已经被绑定(即在编译过程中就已经知道这个方法到底是哪个类中的方法)。
java当中的方法只有最终的、静态的,私人修饰的的方法和构造方法是静态绑定的。
私人修饰的方法:私人修饰的方法是不能被继承的,因此子类无法访问父类中私人修饰的方法,所以只能通过父类对象来调用该方法体,因此可以说私人方法和定义这个方法的类绑定在了一起。
最后修饰的方法:可以被子类继承,但是不能被子类重写(覆盖),所以在子类中调用的实际是父类中定义的最后方法。(使用最后修饰方法的两个好处:(1)防止方法被覆盖;(2)关闭java中的动态绑定)。
静态修饰的方法:可以被子类继承,但是不能被子类重写(覆盖),但是可以被子类隐藏。(这里意思是数哦如果父类里有一个静态的方法,它的子类里如果没有对应的方法,那么当子类对象调用这个方法时就会使用父类中的方法,而如果子类中定义了相同的方法,则会调用子类中定义的方法,唯一的不同就是:当子类对象向上类型转换为父类对象时,不论子类中有没有定义这个静态方法,该对象都会使用父类中的静态方法,因此这里说静态方法可以被隐藏而不能被覆盖。这与子类隐藏父类中的成员变量是一样的。隐藏和覆盖的区别在于,子类对象转换成父类对象后,能够访问父类被隐藏的变量和方法,而不能访问父类被覆盖的方法)。
构造方法:构造方法也是不能被继承的(因为子类是通过超级方法调用父类的构造函数,或者是jvm自动调用父类的默认构造方法),因此编译时也可以知道这个构造方法方法到底是属于哪个类的。
因此,一个方法被继承,或者是被继承后不能被覆盖,那么这个方法就采用静态绑定
<强>动态绑定强>
在运行时期根据具体对象的类型进行绑定。
若一种语言实现了后期绑定,同时必须提供一些机制,可在运行期间判断对象的类型,并分别调用适当的方法,也就是说,编译器此时依然不知道对象的类型,但方法调用机制能自己去调查,找到正确的方法主体。不同的语言对后期绑定的实现方法是有所区别的,但我们至少可以这样认为:它们都要在对象中安插某些特殊类型的信息。
<强>动态绑定的过程:强>
1。虚拟机提取对象实际类型的方法表
2。虚拟机搜索方法签名
3。调用方法
java中重载的方法使用静态绑定,重写的方法使用动态绑定。
<>强实验强>
package 实践; public class 结合{ ,public static  void main (String [], args), { ,Child c =, new 孩子(); ,Parent p =, c; , ,System.out.println (p.getPristr ()); ,System.out.println (c.pristr); ,c.print (); ,p.print (); , ,c.print1 (); ,p.print1 (); , ,c.print2 (); ,p.print2 (); , ,} } 父{class ,private String pristr =,“parent private string"; ,String pubstr =,“public string"; , ,public String  getPristr (), { ,return pristr; ,} ,public void  setPristr (String pristr), {=,,this.pristr  pristr; ,} ,public 父(),{ ,System.out.println(“父构造函数“); ,} , final 才能;public  void print (), { ,,System.out.println(“父保险单上的); ,,} public 才能static void  print1 (), { ,,System.out.println(“父的print1"); ,,} public 才能;void  print2 (), { ,,System.out.println(“父的print2"); ,,} } class Child  extends 父母{ ,String pristr =,“child private string"; ,String pubstr =,“public string"; , ,public 孩子(),{ ,System.out.println(“孩子构造函数“); ,} , ,public static void  print1 (), { ,System.out.println(“孩子的print1"); ,,} , ,public void  print2 (), { ,,System.out.println(“孩子的print2"); ,,} }如何在java中使用动态绑定和静态绑定