題目描述

Java允許共變回傳,可以利用繼承關係來改變方法的傳回型態。



Java允許子類別在覆寫父類別方法的時候,可以將覆寫後的方法型態改為原方法回傳型態的子類別型態。

依照以下類別結構來實作程式:

Flower:String whats_Your_Name()→"I have many names and types"
└Jasmine:String whats_Your_Name()→"Jasmine"
└Lili:String whats_Your_Name()→"Lili"
└Lotus:String whats_Your_Name()→"Lotus"

State:Flower your_National_Flower()→Flower的物件實體
└WestBengal:Jasmine your_National_Flower()→Jasmine的物件實體
└Karnataka:Lotus your_National_Flower()→Lotus的物件實體
└AndhraPradesh:Lili your_National_Flower()→Lili的物件實體

原題網址

https://www.hackerrank.com/challenges/java-covariance

輸入格式

不需處理

輸出格式

不需處理

解題概念

先實作Flower類別,接著實作出Jasmine、Lili、Lotus類別來繼承Flower類別,並覆寫whats_Your_Name方法。

再來實作State類別,接著實作出WestBengal、Karnataka、AndhraPradesh類別來繼承State類別,並覆寫your_National_Flower方法。

使用「@Override」記號可以在編譯時期確保有成功覆寫到父類別的方法。

參考答案

class Flower {

    String whats_Your_Name() {
        return "I have many names and types";
    }
}

class Jasmine extends Flower {

    @Override
    String whats_Your_Name() {
        return "Jasmine";
    }
}

class Lily extends Flower {

    @Override
    String whats_Your_Name() {
        return "Lily";
    }
}

class Lotus extends Flower {

    @Override
    String whats_Your_Name() {
        return "Lotus";
    }
}

class State {

    Flower your_National_Flower() {
        return new Flower();
    }
}

class WestBengal extends State {

    @Override
    Jasmine your_National_Flower() {
        return new Jasmine();
    }
}

class Karnataka extends State {

    @Override
    Lotus your_National_Flower() {
        return new Lotus();
    }
}

class AndhraPradesh extends State {

    @Override
    Lily your_National_Flower() {
        return new Lily();
    }
}