プログラミング入門 Java インスタンス化されたくない場合は抽象クラスにしよう

Javaの継承を使うと柔軟なコードを書くことができますが、スーパークラスを直接使われたくない場合はどうしたら良いでしょうか。
以下のコードでは、Personというスーパークラスを継承してTamibouzクラスを作成しています。
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Person p = new Tamibouz();
System.out.println(p.sayHello());
}
}
class Person {
String sayHello() {
return "サブクラスで実装してね";
}
}
class Tamibouz extends Person{
public String sayHello(){
return "Hello Tami";
}
}しかし、以下のように直接Personクラスを使うこともできます。
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Person p = new Person();
System.out.println(p.sayHello());
}
}
class Person {
String sayHello() {
return "サブクラスで実装してね";
}
}
class Tamibouz extends Person{
public String sayHello(){
return "Hello Tami";
}
}Personクラスはとてもふわふわとしたクラスなので、このクラスを直接使いたくないとします。
そのようなときは抽象クラスにします。
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Person p = new Person();
System.out.println(p.sayHello());
}
}
abstract class Person {
abstract String sayHello();
}
class Tamibouz extends Person{
public String sayHello(){
return "Hello Tami";
}
}class Person の頭に abstract をつけただけです。
抽象クラスはインスタンス化できないので、上記のコードではコンパイル時にエラーになります。
Person is abstract; cannot be instantiated
Person p = new Person();スーパークラスを直接インスタンスさせないで、必ず継承してサブクラスを作って欲しい!というときには、abstract をつけて抽象クラスにすることを検討すると良いでしょう。







ディスカッション
コメント一覧
まだ、コメントがありません