关于动态绑定和静态绑定的问题
老师好,我还是不太理解动态绑定和静态绑定
还有,请老师帮我看一下下面的代码
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 星