27. 抽象クラス

27. 抽象クラス

オーバーライドの強制

lesson 065

class Lesson065 {
    public static void main(String args[]) {
        super_class obj = new CCS();
        obj.write();

        obj = new LOVE_HINA();
        obj.write();
    }
}

abstract class super_class {
    void write() {
    }
}

class LOVE_HINA extends super_class{
    void write() {
        System.out.println("LOVE HINA");
    }
}

class CCS extends super_class {
    void write() {
        System.out.println("Card Captor Sakura");
    }
}

実行結果

L:\>java Lesson065
Card Captor Sakura
LOVE HINA

abstractメソッド

lesson 066

class Lesson066 {
    public static void main(String args[]) {
        super_class obj = new CCS();
        obj.write();

        obj = new LOVE_HINA();
        obj.write();
    }
}

abstract class super_class {
    abstract void write();
}

class LOVE_HINA extends super_class{
    void write() {
        System.out.println("LOVE HINA");
    }
}

class CCS extends super_class {
    void write() {
        System.out.println("Card Captor Sakura");
    }
}

実行結果

L:\>java Lesson066
Card Captor Sakura
LOVE HINA

オーバーライドの禁止 (finalクラス)

lesson 067

class Lesson067 {
    public static void main(String args[]) {
        super_class obj = new sub_class();
    }
}

final class super_class {
    String name;
}

class sub_class extends super_class {
    int age;
}

コンパイル結果

L:\>javac lesson067.java
lesson067.java:11: final super_class からは継承できません。
class sub_class extends super_class {
^
エラー 1 個

オーバーライドの禁止 (finalメソッド)

lesson 068

class Lesson068 {
    public static void main(String args[]) {
        super_class obj = new sub_class();
    }
}

class super_class {
    final void write() {
        System.out.println("kitty on yoru lap");
    }
}

class sub_class extends super_class {
    void write() {
        System.out.println("Card Captor Sakura");
    }
}

コンパイル結果

L:\>javac lesson068.java
lesson068.java:14: sub_class の write() は super_class の write() をオーバーライドできません。オーバーライドされたメソッドは final です。
void write() {
^
エラー 1 個