关于动态绑定和静态绑定的问题
老师好,我还是不太理解动态绑定和静态绑定
还有,请老师帮我看一下下面的代码
public class Bind{ public static void main(String[] args) { Child c = new Child(); 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 Parent{ private String pristr = "parent private string"; String pubstr = "public string"; public String getPristr() { return pristr; } public void setPristr(String pristr) { this.pristr = pristr; } public Parent() { System.out.println("parent构造函数"); } final public void print() { System.out.println("parent的print"); } public static void print1() { System.out.println("parent的print1"); } public void print2() { System.out.println("parent的print2"); } } class Child extends Parent{ String pristr = "child private string"; String pubstr = "public string"; public Child() { System.out.println("child构造函数"); } public static void print1() { System.out.println("child的print1"); } public void print2() { System.out.println("child的print2"); } }
我调试看了半天还是搞不懂它的执行,子类对象实例化的时候不是应该先从父类的静态成员开始吗,为啥是从父类的构造开始,然后还先执行了父类里的private String pristr = "parent private string";
String pubstr = "public string";
正在回答
同学你好,程序是会先加载在父类中的print1()方法,但子类中重写父类的print1()方法,则当通过子类实例化对象调用的print1()方法则为子类中的,并不是父类中的print1()方法。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
同学你好,1. 动态绑定最大的特点是由随机生成的数字,来决定动态生成哪一个!运行效果是不确定的,每次的运行效果都不同!
2. 静态绑定就是在程序编译时就绑定的.java中的变量都是静态绑定的,而static和final(所有private默认是final的)修饰的方法是静态绑定的。
3. 子类对象实例化的时候执行顺序:父类静态块-->子类静态块-->父类非静态块-->父类构造方法-->子类非静态块-->子类构造方法 会先执行父类中的内容,然后执行子类中的内容,所以先执行了父类里的private String pristr = "parent private string"; 与 String pubstr = "public string";
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星