多态: 提高代码可扩展性,可维护性高,同一个引用类型,使用不同的实例而执行不同操作.
两种实现方式:①父类作为方法参数实现多态②使用父类作为方法返回值实现多态.
实现多态两个要素①子类重写父类的方法②父类引用指向
父 f=new 子();
属性看左边
方法,编译看左边运行看右边
对于子类特有方法,向下
子 z=(子)f;
多态使用:①创建父类变量,实例化子类对象
②把父类型作为参数类型,该子类及子类对象为参数传入
③使用父类作为方法的返回值
/*1、使用多态实现计算器的加减乘除,
* 根据运算符不同实例化不同子类进行计算(运算符可键盘接收输入)
例如:加法有num1、num2属性,方法:计算求和
减法有num1、num2属性,方法:计算求差*/
public class Test05 {
public static void main(String[] args) {
System.out.println("请输入一个运算符");
Scanner input = new Scanner(System.in);
String oparator = input.next();
while (!oparator.equals("+") && !oparator.equals("-") && !oparator.equals("*") && !oparator.equals("/")) {
System.out.println("你输入的运算符有误,请重新输入");
oparator = input.next();
}
double result = 0.0;
Operation op = null;
switch (oparator) {
case "+":
op = new Add(4, 2);
break;
case "-":
op = new Subtract(4, 2);
break;
case "*":
op = new Mul(4, 2);
break;
case "/":
op = new Div(4, 2);
break;
}
result = Calculation.cal(op);
System.out.println(result);
}
}
class Calculation {
public static double cal(Operation op) {
return op.calculate();
}
}
class Operation {
double num1;
double num2;
public Operation() {
}
public Operation(double num1, double num2) {
super();
this.num1 = num1;
this.num2 = num2;
}
public double calculate() {
return 0.0;
}
}
class Add extends Operation {
public Add(double num1, double num2) {
super(num1, num2);
}
@Override
public double calculate() {
// TODO Auto-generated method stub
return num1 + num2;
}
}
class Subtract extends Operation {
public Subtract(double num1, double num2) {
super(num1, num2);
}
@Override
public double calculate() {
return num1 - num2;
}
}
class Mul extends Operation {
public Mul(double num1, double num2) {
super(num1, num2);
}
@Override
public double calculate() {
return num1 * num2;
}
}
class Div extends Operation {
public Div(double num1, double num2) {
super(num1, num2);
}
@Override
public double calculate() {
return num1 / num2;
}
}