常见的多态面试题

多态的概念及其构成条件

多态概念:对不同的对象会有不同的实现方法,即为多种形态。

构成条件:

  1. 派生类要进行虚函数的重写(父子类虚函数需要三同,三同指函数名、参数、返回值)
  2. 要用父类的指针或引用去调用虚函数

三同有种列外:协变(基类与派生类的虚函数返回值不同)

 其他注意事项:

  1. 析构函数的重写(看似不符合函数名相同的条件,实际上编译器对其进行了特殊处理,编译后析构函数的名字统一处理成destructor)
  2. 派生类虚函数重写可以不加virtual(但建议写上)

重载、重写、重定义 

注意:重写是指重写函数体。

如下图,有这么一道题:b通过虚函数表调用了继承的test(),test()又通过虚函数表找到自己的(重写的)func()结果打印出来的结果却是B:1,其使用的缺省值是A类中的func()的缺省值,所以实际上b调用func函数时使用的是自己的函数体,声明却是使用原声明。 

class A
{
public:
	virtual void func(int val = 1)
	{
		cout << "A:" << val << endl;
	}
	virtual void test()
	{
		func();
	}
private:
	int a;
};


class B: public A
{
public:
	//virtual void func(int val = 0)
	void func(int val = 0)
	{
		cout << "B:" << val << endl;
	}
private:
	int b;
};

int main()
{
	B* b = new B;
	b->test();
	return 0;
}

 

纯虚函数 

纯虚函数就是在虚函数的声明后加上  =0  ,有纯虚函数的类被称作抽象类,抽象类不能实例化对象。如果继承的派生类不重写纯虚函数,那么这个派生类也是抽象类。

 

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是几个常见的Java多面试: 1. 什么是Java中的多性?请举例说明。 多性是指同一个方法或者同一个类在不同情况下表现出不同的行为。在Java中,多性通常通过继承和接口来实现。例如,一个Animal类可以有多个子类,如Dog、Cat等,它们都可以重写Animal类中的方法,让同一个方法在不同的子类中表现出不同的行为。 2. 什么是动绑定?它和静绑定有什么区别? 动绑定是指在程序运行时根据对象的实际类型来确定调用哪个方法。Java中的动绑定是通过虚方法表来实现的。 静绑定是指在编译时根据引用类型来确定调用哪个方法。例如,如果一个Animal类型的引用指向一个Dog类型的对象,那么调用方法时会根据Animal类型来确定调用哪个方法,而不是根据Dog类型。 3. 什么是抽象类?它和接口有什么区别? 抽象类是一种不能被实例化的类,它通常包含一些抽象方法,需要由其子类去实现。抽象类可以拥有普通方法、静方法、实例变量等。 接口是一种定义一组抽象方法的结构,它不能被实例化,只能被实现。接口中的方法都是抽象的,没有方法体。接口可以被类实现,一个类可以实现多个接口。 区别在于,抽象类可以拥有普通方法和实例变量,而接口只能包含抽象方法和常量。一个类只能继承一个抽象类,但可以实现多个接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值