如何在java中使用动态绑定和静态绑定

  介绍

如何在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中使用动态绑定和静态绑定