天天看點

java面向對象(多态)

多态: 提高代碼可擴充性,可維護性高,同一個引用類型,使用不同的執行個體而執行不同操作.

兩種實作方式:①父類作為方法參數實作多态②使用父類作為方法傳回值實作多态.

實作多态兩個要素①子類重寫父類的方法②父類引用指向

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