1.重载和覆写
方法重载:当类包含两个名称相同但签名不同(方法名相同,参数列表不同)的方法时发生方法重载,用方法重载来提供在语义上完成相同功能的不同方法.
覆写:在类的继承使用中,通过覆写override来实现改变父类虚方法的实现.需要注意的是,在方法覆写的过程中,一些方法有必要调用父类的方法,覆写中必须留父类方法.
2.接口与继承的区别?什么时候使用接口?什么时候使用继承?
1)接口定义一个类型需要实现的方法,属性,,索引和时间,包括可能的参数类型和返回值类型,而把具体的实现交由相应的类或结构来做,从而为组建提供多态能力.
2)继承常用于在一个现有父类的基础上的功能扩展,往往是我们将几个类中相同的成员提取出来放在父类中实现,然后再各自的子类中加以继承.
3)接口可以实现多接口继承,而继承只能实现但继承
4)实现继承可继承父类型的实现,由于接口中没有定义方法的实现,因此必须实现继承后该接口的所有方法.
5)为父类添加方法可能不影响使用集成子该类实现的用户,而为接口添加方法导致用户必须为新方法添加实现.
6)当派生类和基类是is-a的关系是使用”继承”,典型案例”苹果is –a 水果”,存在can-do的关系时使用”接口”.
一个类只能继承于一个父类,但是可以实现多个接口.
我们来看一个简单的计算器代码:
class Operation
{
private double _numberA, _numberB;
public double NumberA
{
get { return _numberA; }
set { _numberA = value; }
}
public double NumberB
{
get { return _numberB; }
set { _numberB = value; }
}
/// <summary>
/// 得到两个数的运算结果
/// </summary>
/// <param name="numberA">用户输入的第一个数</param>
/// <param name="numberB">用户输入的第二个数</param>
/// <returns>运算后的结果</returns>
public virtual double getResult(double numberA,double numberB)
{
double result=0;
return result;
}
}
这是一个简单的计算器类,通过继承,我们可以将它扩展出家法和减法操作
class OperationAdd:Operation
{
/// <summary>
/// 加法操作
/// <see cref="StudyCon1.Operation.getResult(double NumberA,double NumberB)"/>
/// </summary>
/// <param name="NumberA"></param>
/// <param name="NumberB"></param>
/// <returns></returns>
public override double getResult(double NumberA, double NumberB)
{
double result = 0;
result = NumberA + NumberB;
return result;
}
}
class OperationSub:Operation
{
/// <summary>
/// 减法操作
/// <see cref="StudyCon1.Operation.getResult(double NumberA,double NumberB)"/>
/// </summary>
/// <param name="NumberA"></param>
/// <param name="NumberB"></param>
/// <returns></returns>
public override double getResult(double NumberA, double NumberB)
{
double result = 0;
result = NumberA - NumberB;
return result;
}
}
这样就可以大大扩展了Operation的功能,使操作更具体.
接下来看一下使用接口实现同样的方法:
首先定义一个接口
interface IOperation
{
double getResult();
}
然后实现这个接口:
class ImplOperationAdd:IOperation
{
private double _numberA, _numberB;
ImplOperationAdd(double a, double b)
{
_numberA = a;
_numberB = b;
}
public double getResult()
{
return _numberA + _numberB;
throw new NotImplementedException();
}
}
这样我们就从接口中实现了一个两数加法的类.
class ImplOperationSub:IOperation
{
private double _numberA, _numberB;
ImplOperationSub(double a, double b)
{
_numberA = a;
_numberB = b;
}
public double getResult()
{
return _numberA - _numberB;
throw new NotImplementedException();
}
}
从接口实现的减法类
浙公网安备 33010602011771号