java多态练习题_java有关多态的例题分享,java多态面试题

本文分享了几个经典的Java多态例题,包括编译时多态与运行时多态的区别,以及运行时多态的必要条件。通过实例分析了如何在代码中体现多态性,并探讨了多态带来的好处,如可替换性、可扩充性等。此外,文章还提供了一些面试备考建议。
摘要由CSDN通过智能技术生成

下面要给大家分享的是几个比较经典也很简单的java多态例题,感兴趣的小伙伴可以一起来通过下面的文章了解一下,对于java面试还是很有帮助的呢。

1、多态分类

多态分成了2种,一个是编译时多态,另外一个是运行时多态。

编译时多态-方法重载。

2、运行时多态存在的三个必要条件是什么?

(1)、要有继承,还包括了接口的实现

(2)、要有重写

(3)、父类引用指向子类对象

3、多态的好处是什么?

主要有五大好处,分别是可替换性、可扩充性、接口性、灵活性、简化性。

分别介绍一下,多态对已经存在代码具有可替换性,例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作;多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作,实际上新加子类更容易获得多态功能,例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性;多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的;多态在应用中体现了灵活多样的操作,提高了使用效率;多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作的时候,这个特点尤为突出和重要;

4、题目package arithmetic;

public class duotai

{

class A

{

public String show(D obj)

{

return ("A and D");

}

public String show(A obj)

{

return ("A and A");

}

}

class B extends A

{

// B可以重写A

public String show(B obj)

{

return ("B and B");

}

// 重写A方法了吗?

public String show(A obj)

{

return ("B and A");

}

}

class C extends B

{}

class D extends B

{}

public static void main(String[] args)

{

duotai outerclass = new duotai();

A a1 = outerclass.new A();

A a2 = outerclass.new B();

B b = outerclass.new B();

C c = outerclass.new C();

D d = outerclass.new D();

System.out.println("1:" + a1.show(b));

System.out.println("2:" + a1.show(c));

System.out.println("3:" + a1.show(d));

System.out.println("4:" + a2.show(b));

System.out.println("5:" + a2.show(c));

System.out.println("6:" + a2.show(d));

System.out.println("7:" + b.show(b));

System.out.println("8:" + b.show(c));

System.out.println("9:" + b.show(d));

}

}

输出:1: A and A

2: A and A

3: A and D

4: B and A

5: B and A

6: A and D

7: B and B

8: B and B

9: A and D

分析:

1、a1是A类的一个实例化对象,所以this指向A,之后查找this.show(b),因为,没有这个方法,所以到super.show(b),可是因为A类没有超类了,所以到this.show(super

b),因为,b的超类是A,所以相当于this.show(A),然后在A类中查找到了这个方法,所以输出A and A。

2、a1是A类的实例化对象,所以this指向A,之后,在A类中查找this.show(C)方法,因为,没有这个方法,所以到了super.show(C),由于A类的超类里面找,可是,A没有超类,所以到了this.show(super

C),因为,C的超类是B所以在A类里面查找this.show(B)方法,也没找到,之后,B也有超类,就是A,所以查找this.show(A),找到了,所以,输出A

and A;

3、a1是A类的实例化对象,所以this指向A,之后,在A类中找到this.show(D)方法,找到了,所以就输出A and D;

4、a2是B类的引用对象,类型为A,所以this指向A类,之后,在A类里面找this.show(B)方法,没有找到,所以到了super.show(B),由于A类没有超类,所以到了this.show(super

B),B的超类是A,也就是super B =

A,所以执行方法this,show(A),在A方法里面找show(A),找到了,可是,因为a2是一个类B的引用对象,B类里面覆盖了A类的show(A)方法,所以最终执行的是B类里面的show(A)方法,所以,输出B

and A;

5、a2是B类的引用对象,类型为A,所以this指向A类,之后,在A类里面找this.show(C)方法,没有找到,所以到了super.show(C)方法,因为,A类没有超类,所以到了this.show(super

C),C的超类是B,所以在A类里面找show(B),同样没有找到,发现B还有超类,也就是A,所以还继续在A类里面找show(A)方法,找到了,可是,因为a2是一个类B的引用对象,而B类里面覆盖了A类的show(A)方法,所以最终执行的是B类里面的show(A)方法,所以,输出B

and A;

6、a2是B类的引用对象,类型为A,所以this指向A类,之后,在A类里面找this.show(D)方法,找到了,可是因为,a2是一个类B的引用对象,所以在B类里面查找有没有覆盖show(D)方法,没有,所以执行的是A类里面的show(D)方法,所以输出A

and D;

7、b是B类的一个实例化对象,首相执行this.show(B),在B类里面找show(B)方法,找到了,直接输出B and B;

8、b是B类的一个实例化对象,首相执行this.show(C),在B类里面找show(C)方法,没有找到,所以到了super.show(c),B的超类是A,所以在A类中找show(C)方法,没有找到,于是到了this.show(super

C),C的超类是B,所以在B类中找show(B)f方法,找到了,所以执行B类中的show(B)方法输出B and B;

9、b是B类的一个实例化对象,首相执行this.show(D),在B类里面找show(D)方法,没有找到,所以,到了super.show(D),B的超类是A类,所以在A类里面找show(D)方法,找到了,所以输出A

and D;

很多人说对于java面试都会很紧张,可是,只要你做好了充分的准备,有了底气那么这些应该都不是问题,建议大家在去面试之前,多看一些java面试题和面经,这样对你的面试会有很大的帮助哦。

推荐阅读:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值