当前位置:编程学习 > JAVA >>

执行顺序

public class Test1 {
 public static void main(String[] args) {
 A1 a = new A2(1,33);
 //a.print();
 System.out.println(a.getId());
 System.out.println(a.getAge());
 /*A2 a1 = (A2)a;
 a1.print1();
 System.out.println(a1.getId());
 System.out.println(a1.getAge());*/
 }
}

class A1 {
 private int id=1, age=1;

 A1(){}

 A1(int id, int age) {
 this.id = id;
 this.age = age;
 //System.out.println("1");
 }

 public int getId() {
 //System.out.println("z");
 return id;
 }

 public int getAge() {
 //System.out.println("z");
 return age;
 }

 public void print() {
 System.out.println(getId() + "+" + getAge());
 }
}

class A2 extends A1 {

 
 
 
 private int id=2, age=2;

 A2(int id, int age) {
super(id,age);

 }

 public int getId() {
 //System.out.print("y1");
 
 return id;
 }

 public int getAge() {
 //System.out.print("y2");
 return age;
 }

 public void print() {
 System.out.println(getId() + "-" + getAge());
 }
 
}

急!!!!它在内存中的执行是什么样的 --------------------编程问答-------------------- 1.执行super关键字引用的父类构造方法给父类中的Id和Age初始化
2.调用A2的实例中的get()方法得到初始化值为2的Id和Age,并打印输出。 --------------------编程问答-------------------- System.out.println(a.getId());
调用的是A2的getId()方法,因为A2类重写了A1的getId()方法。
System.out.println(a.getAge());
也是同理, --------------------编程问答-------------------- 在实例化一个子类时,子类的构造方易做图首先调用父类的构造方法。这就是为什么super关键字必须出现在子类构造方法的第一行了。子类调用父类的构造方法可以使用super关键字隐式调用,也可以是不使用super关键字的隐式调用。当是隐式调用时,子类会调用父类无参的默认构造方法。此时如果父类中没有无参的默认构造方法,就会出现编译错误。 --------------------编程问答-------------------- A1 a = new A2(1,33);这是多态问题,父类的引用指向子类的对象,在这样实例化的过程中,子类首先重写父类的print() 方法,在调用的过程中,父类的引用指向那个子类的对象,调用那个子类的方法。如果子类没有重写父类的方法,A1 a = new A2(1,33)这个形式的调用不成功。A1 a = new A2(1,33)这儿也涉及到了强制类型转换,只不过是子类的对象转化到父类,所以不需要强制转换,如果是父类转换到子类,则需要强制转换。

 还有在继承实现的过程中,子类的对象先调用父类的构造方法,然后在调用子类的构造的方法。 --------------------编程问答-------------------- 学习了
引用 4 楼  的回复:
A1 a = new A2(1,33);这是多态问题,父类的引用指向子类的对象,在这样实例化的过程中,子类首先重写父类的print() 方法,在调用的过程中,父类的引用指向那个子类的对象,调用那个子类的方法。如果子类没有重写父类的方法,A1 a = new A2(1,33)这个形式的调用不成功。A1 a = new A2(1,33)这儿也涉及到了强制类型转换,只不过是子类的对象转化到父类,所以不……
补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,