プログラミング入門 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 をつけて抽象クラスにすることを検討すると良いでしょう。
ディスカッション
コメント一覧
まだ、コメントがありません