多态: 提高代码可扩展性,可维护性高,同一个引用类型,使用不同的实例而执行不同操作.

两种实现方式:①父类作为方法参数实现多态②使用父类作为方法返回值实现多态.

实现多态两个要素①子类重写父类的方法②父类引用指向

父 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;

}

}