多态面试题

1、什么是多态

面向对象三大特性之一,简单的说是一种接口多种实现
多态是建立在继承的基础上,是指不同的子类在继承父类后分别重写父类的方法,在继承子类中表现不同的形式。多态成立的另一个条件是在创建子类的时候必须使用父类new子类的方式,一句话,允许将子类类型的指针赋值给父类类型的指针,

2、多态的作用

1、不必为每一个派生类调用功能调用,只需要对抽象基类进行处理即可,大大提升程序可复用性
2、派生类功能可以被基类的方法或引用变量调用,向后兼容,提高可扩充性和可维护性

3、多态的分类

编译时的多态是通过重载实现
运行时的多态是通过虚函数实现的

4、多态分类

静态多态包含函数重载和泛型编辑,静态多态是程序调用函数,编辑器决定用哪个执行代码块
动态多态是由继承机制及虚函数实现的,通过指向派生类的基类指针或引用访问生成类中同名覆盖的成员函数。

5、多态两种转换方式

向上转型:当时多态时,该引用名称只能访问父类中的属性和方法,但是优先访问子类重写以后的方法。

main{
Pet p=new Dog();
    p.eat();
    p.paly();
}

向下转型:强制转型,

public static void main(String[] args) {
		// TODO Auto-generated method stub
		Pet p = new Dog();
		p.eat();

		//p.play(); //报错,多态当中无法直接访问子类当中独有的方法或属性
		Dog d =(Dog)p;
		d.play();

当进行向下转型时,建议先进行判断,当合法则在转为对应的类型,则使用instanceof关键字,否则可能会出现类型转换异常java.lang.ClassCastException

if(p instanceof Dog){
	Dog d = (Dog)p;
	d.play();
}
else if(p instanceof Cat){
	Cat c = (Cat)p
	c.play();
}

6、重载和重写

1、重载发生在同一类中,函数名相同,参数个数或者参数类型不同,与返回值类型不同
以下不是重载

public double add(int a ,int b)
public int add(inta,int b)

2、重写,发生在父类子类之间,方法名相同,参数列表相同

7、多态的实现方式

1、方法重载:一个类中,相同方法名对应不同的方法实现,区别在于方法不同
2、方法的重写在于父类子类之间,子类重写父类方法,只是对应方法实现不同,方法名和方法参数都相同
3、抽象类:,父类指向子类对象,可调用子类的重写方法,一个抽象类中的方法只给出类标准,而没有给出具体的方法实现,这样的类就是抽象类。
4、接口,在多态机制中,接口比抽象类使用更加方便,而抽象类组成的集合就是接口。

8、多态的必要条件

1、继承,父类子类继承,
2、重写,子类对父类某些方法进行重新定义,在调用这些方法的时候会调用子类方法
3、向上转型,将子类的引用赋给父类杜希艾姑娘,

9、什么地方用多态

1、接口中的方法都是多态
2、一个类继承多个接口
3、实现接口要实现接口总的多种方法
4、接口的变量被隐式的指定为public static final变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值