java重写题目_这个很实用!用Java重写经典面试题分析

这篇博客通过一个Java代码示例,分析了类继承中方法重写和重载的使用。内容包括不同对象调用同一方法时,如何根据对象类型选择执行父类或子类的方法,以及重写规则的应用。解题技巧强调了判断对象类型和方法调用优先级的重要性。
摘要由CSDN通过智能技术生成

[html] view plain copy

public class A {

public void print(A a){

System.out.println("A and A");

}

public void print(D d){

System.out.println("A and D");

}

}

[html] view plain copy

public class B extends A{

public void print(B b){

System.out.println("B and B");

}

public void print(A a){

System.out.println("B and A");

}

/*//继承的

public void print(D d){

System.out.println("A and D");

}*/

}

[html] view plain copy

public class C extends B{

public void print(C c){

System.out.println("C and C");

}

public void print(A a){

System.out.println("C and A");

}

/*//继承的

public void print(D d){

System.out.println("A and D");

}

public void print(B b){

System.out.println("B and B");

}*/

}

[html] view plain copy

public class D extends B{

public void print(D a){

System.out.println("D and D");

}

public void print(A a){

System.out.println("D and A");

}

/*//继承的

public void print(B b){

System.out.println("B and B");

}*/

}

题目如下:

[html] view plain copy

public class Main {

public static void main(String[] args) {

A a1 = new A();

A a2 = new B();

B b = new B();

C c = new C();

D d = new D();

a1.print(b);//(1)A and A

a1.print(c);//(2)A and A

a1.print(d);//(3)A and D

a2.print(c);//(4)B and A

a2.print(c);//(5)B and A

a2.print(d);//(6)A and D

b.print(b);//(7)B and B

b.print(c);//(8)B and B

b.print(d);//(9)A and D

d.print(b);//(10)B and B

d.print(c);//(11)B and B

d.print(d);//(12)D and D

}

}

(1)属于this.show(O)的情形。a1是A类型的对象,优先调用A类中的println方法,此外,a1同时又是A类的一个实例,不存在方法的重写,b是B类的一个实例,同时b属于B类,也属于A类,故a1.print(b)调用的是A类中的public void print (A a)方法。

(3)a1是A类型的一个对象,优先调用A类中的println方法,此外,a1同时又是A类的一个实例,不存在方法的重写,d是D类的一个实例,故调用public void print(D d)方法。

(4)a2.show(c)中,a2是A类型的对象,c属于C类的实例,也属于A类的实例,优先调用A类中的print(A,a)方法,但是a2是B类的一个实例,B类中将print(A,a)方法进行了重写,故调用重写后的print(A,a)方法。

解题技巧:

首先对对象类型进行判断,优先调用父类中的方法,如果子类对父类的方法存在重写,调用重写后的方法。如果没有重写方法,则子类重载了父类的方法,则载入父类的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值