多态:
1、虚方法:Virtual 如果父类创建的方法有意义,并且知道如何实现,这使用虚方法实现多态
2、抽象类:abstract 如果父类抽象不出一个具体的方法,也不知道如何实现,则使用抽象类
虚方法学习:面向对象之计算器
需求分析:加减乘除,不知道用户使用哪一个,也不知道如何计算,所以使用抽象方法;
为了屏蔽子类之间的运算差异,需要使用简单工厂模式返回一个父类,调用父类的运算方法;
预算需要2个数字,父类需要2个属性。为获取两个数字,需要创建构造函数
开始写代码:
创建父类:
public abstract class Calculate
{
public double NumberOne
{
get;
set;
}
public double NumberTwo
{
get;
set;
}
public Calculate(double numberOne, double numberTwo)
{
this.NumberOne = numberOne;
this.NumberTwo = numberTwo;
}
public abstract double GetResult();
}
创建子类加减乘除:子类重写父类的抽象方法,并使用base继承父类的构成函数
public class Add : Calculate
{
public Add(double numberOne, double numberTwo) : base(numberOne, numberTwo)
{
}
public override double GetResult()
{
return NumberOne + NumberTwo;
}
}
public class Sub : Calculate
{
public Sub(double numberOne, double numberTwo) : base(numberOne, numberTwo)
{
}
public override double GetResult()
{
return NumberOne - NumberTwo;
}
}
public class Mul : Calculate
{
public Mul(double numberOne, double numberTwo) : base(numberOne, numberTwo)
{
}
public override double GetResult()
{
return NumberOne * NumberTwo;
}
}
public class Division : Calculate
{
public Division(double numberOne, double numberTwo) : base(numberOne, numberTwo)
{
}
public override double GetResult()
{
return NumberOne / NumberTwo;
}
}
创建用户界面:
tatic void Main(string[] args)
{
Console.WriteLine("请输入第一个数字");
double numberOne =Convert.ToInt32( Console.ReadLine());
Console.WriteLine("请输入第二个数字");
double numberTwo = Convert.ToInt32(Console.ReadLine());
double number2 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("请输入一个运算符 + - * / " );
string opertor = Console.ReadLine();
}
创建简单工厂模式,获取子类对象,并返回一个父类
public static Calculate GetCal(string opertor,double numberOne,double numberTwo)
{
Calculate cal = null;
switch (opertor)
{
case "+":cal = new Add(numberOne,numberTwo);
break;
case "-":
cal = new Sub(numberOne, numberTwo);
break;
case "*":
cal = new Mul(numberOne, numberTwo);
break;
case "/":
cal = new Division(numberOne, numberTwo);
break;
}
return cal;
}
完善用户界面:
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("请输入第一个数字");
double number1 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("请输入第二个数字");
double number2 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("请输入一个运算符 + - * / ");
string opertor = Console.ReadLine();
Calculate cal = GetCal(opertor, number1, number2);
double result= cal.GetResult();
Console.WriteLine(result);
}
}
哈哈,完成!!!!