多态: 提高代碼可擴充性,可維護性高,同一個引用類型,使用不同的執行個體而執行不同操作.
兩種實作方式:①父類作為方法參數實作多态②使用父類作為方法傳回值實作多态.
實作多态兩個要素①子類重寫父類的方法②父類引用指向
父 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);
case "*":
op = new Mul(4, 2);
case "/":
op = new Div(4, 2);
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
// TODO Auto-generated method stub
return num1 + num2;
class Subtract extends Operation {
public Subtract(double num1, double num2) {
return num1 - num2;
class Mul extends Operation {
public Mul(double num1, double num2) {
return num1 * num2;
class Div extends Operation {
public Div(double num1, double num2) {
return num1 / num2;