java动态绑定和静态绑定(分步验证)
2017-10-23 20:56
344 查看
参考文献:http://www.importnew.com/14338.html
静态绑定:顾名思意,就是固定的,在编译期已经确定了,
动态绑定:顾名思意,就是活动的,在运行期才确定下来。
1.静态绑定发生在编译时期,动态绑定发生在运行时
2.使用private或static或final修饰的变量或者方法,使用静态绑定。而虚方法(可以被子类重写的方法)则会根据运行时的对象进行动态绑定。
3.静态绑定使用类信息来完成,而动态绑定则需要使用对象信息来完成。
4.重载(Overload)的方法使用静态绑定完成,而重写(Override)的方法则使用动态绑定完成
在学习上面知识,要有储备知识:重载,重写的区别,java对象的初始化顺序,不是说没有就看不懂,只是没有看的不清楚把了!!!
开始对上面进行验证:
1.第一点这没什么好说的,主要是个人的理解。
2.第二点,http://blog.csdn.net/zhangjk1993/article/details/24066085 这篇文章说的很详细,
我想补存的是对static的理解,如果你看过我的《java对象的初始化顺序》就可以知道static是对Class的修饰,换句话说,staic是对类的信息的初始化,符合上面的第三条。
补充:package com.zhiyou.video.test.test1;
public class test1 {
public static void main(String[] args) {
Father father = new Father();
Son son = new Son();
Father sonTofather = new Son();
System.out.println("/////////////对成员变量的测试//////////////");
System.out.println("father:" + father.a);
System.out.println("son:" + son.a);
System.out.println("sonTofather:" + sonTofather.a);
System.out.println("////////////对静态反法的测试////////////////");
Father.test1();
Father.test2();
System.out.println("-------");
Son.test1();
Son.test2();
}
}
class Father {
public int a = 1;
public static void test1() {
System.out.println("father中的static方法test1!");
}
public static void test2() {
System.out.println("father中的static方法test2!");
}
}
class Son extends Father {
public int a = 2;
public static void test1() {
System.out.println("son中的static方法test1!");
}
}
那么大家
4000
看看上面的代码猜猜结果!!
/////////////对成员变量的测试//////////////
father:1
son:2
sonTofather:1
////////////对静态反法的测试////////////////
father中的static方法test1!
father中的static方法test2!
-------
son中的static方法test1!
father中的static方法test2!
请看上面的结果sonTofather的结果是1,不是2,这说明,成员变量是个静态值,他不存在被覆盖的现象!!!
然后在请看对于Son的静态方法test1和test2结果,可一看到是由类的信息来进行的,子类中存在父类的方法,由于没有对象,也就不存在转型问题!!
3.第三点,关于例子可以参考上篇文章:《
》
静态绑定:顾名思意,就是固定的,在编译期已经确定了,
动态绑定:顾名思意,就是活动的,在运行期才确定下来。
1.静态绑定发生在编译时期,动态绑定发生在运行时
2.使用private或static或final修饰的变量或者方法,使用静态绑定。而虚方法(可以被子类重写的方法)则会根据运行时的对象进行动态绑定。
3.静态绑定使用类信息来完成,而动态绑定则需要使用对象信息来完成。
4.重载(Overload)的方法使用静态绑定完成,而重写(Override)的方法则使用动态绑定完成
在学习上面知识,要有储备知识:重载,重写的区别,java对象的初始化顺序,不是说没有就看不懂,只是没有看的不清楚把了!!!
开始对上面进行验证:
1.第一点这没什么好说的,主要是个人的理解。
2.第二点,http://blog.csdn.net/zhangjk1993/article/details/24066085 这篇文章说的很详细,
我想补存的是对static的理解,如果你看过我的《java对象的初始化顺序》就可以知道static是对Class的修饰,换句话说,staic是对类的信息的初始化,符合上面的第三条。
补充:package com.zhiyou.video.test.test1;
public class test1 {
public static void main(String[] args) {
Father father = new Father();
Son son = new Son();
Father sonTofather = new Son();
System.out.println("/////////////对成员变量的测试//////////////");
System.out.println("father:" + father.a);
System.out.println("son:" + son.a);
System.out.println("sonTofather:" + sonTofather.a);
System.out.println("////////////对静态反法的测试////////////////");
Father.test1();
Father.test2();
System.out.println("-------");
Son.test1();
Son.test2();
}
}
class Father {
public int a = 1;
public static void test1() {
System.out.println("father中的static方法test1!");
}
public static void test2() {
System.out.println("father中的static方法test2!");
}
}
class Son extends Father {
public int a = 2;
public static void test1() {
System.out.println("son中的static方法test1!");
}
}
那么大家
4000
看看上面的代码猜猜结果!!
/////////////对成员变量的测试//////////////
father:1
son:2
sonTofather:1
////////////对静态反法的测试////////////////
father中的static方法test1!
father中的static方法test2!
-------
son中的static方法test1!
father中的static方法test2!
请看上面的结果sonTofather的结果是1,不是2,这说明,成员变量是个静态值,他不存在被覆盖的现象!!!
然后在请看对于Son的静态方法test1和test2结果,可一看到是由类的信息来进行的,子类中存在父类的方法,由于没有对象,也就不存在转型问题!!
3.第三点,关于例子可以参考上篇文章:《
java虚拟机中的invokevirtual所造成的问题
》
相关文章推荐
- c++动态绑定、静态绑定与java中动态绑定与静态绑定的比较
- 学习笔记之 java的动态绑定与静态绑定
- java的动态绑定与静态绑定
- Java学习笔记之深入理解动态绑定和静态绑定
- Java静态绑定与动态绑定 隐藏 多态
- Java方法的动态绑定与静态绑定
- 【Java学习】Java方法的静态绑定与动态绑定讲解
- java中的动态绑定和静态绑定
- Java中静态绑定与动态绑定详解
- Java方法的静态绑定与动态绑定讲解(向上转型的运行机制详解)
- java的动态绑定与静态绑定
- Java中的动态绑定和静态绑定
- java的动态绑定与静态绑定
- java的动态绑定与静态绑定
- Java 基础(8)—— 向上转型、向下转型、动态绑定、静态绑定
- Java的动态绑定和静态绑定
- java动态绑定静态绑定
- 从Java静态绑定和动态绑定中得到优化启示
- java的动态绑定与静态绑定
- Java静态绑定与动态绑定