2016-10-12 8 views
0

スーパークラスコンストラクタに配置されたコードの実行を防ぐことはできますか?この例では、出力はJavaはコンストラクタのサブクラスからのみコードを実行します

From Person From Student

ですが、私はFrom Personをプリントアウトする必要はありません。 super(a, n);を削除すると、プログラムはコンパイルされません。サブクラスからのメッセージだけを出力することは可能ですか?

class Person { 

private int age; 
private String name; 

public Person(int a, String n) { 
    this.age = a; 
    this.name = n; 
    System.out.println("From Person"); 
} 

public int getAge() { 
    return age; 
} 

public void setAge(int a) { 
    this.age = a; 
} 

public String getName() { 
    return name; 
} 

public void setName(String n) { 
    this.name = n; 
} 
} 

class Student extends Person { 

private String specialization; 

public Student(int a, String n, String s) { 
    super(a, n); 
    specialization = s; 
    System.out.println("From Student"); 
} 

public String getSpecialization() { 
    return specialization; 
} 

public void setSpecialization(String s) { 
    this.specialization = s; 
} 
} 

public class Classes { 

public static void main(String[] args) { 
    Student student_Jack = new Student(20, "Jack", "IT"); 
} 
} 
+1

なぜこれをやりたいですか? – Clayn

+0

'System.out.println(" From Person ");' ...? – khelwood

+0

スーパークラスの完全なコンストラクタロジックが呼び出されないようにしたいのですか、または単に出力を消したいだけですか? – Gernot

答えて

0

super(a,n)を使用する代わりに、作成した変数を設定する方法を使用する必要があります。

public Student(int a, String n, String s) { 
    setAge(a); 
    setName(n); 
    specialization = s; 
    System.out.println("From Student"); 
} 

また、空のコンストラクタを直接追加する必要があります。

public Person(){} 

これは、スーパーコンストラクタを呼び出す必要なく、同じ機能を提供します。

+0

それから、エラーです: '暗黙のスーパーコンストラクタPerson()は未定義です。明示的に別のコンストラクタを呼び出さなければならない ' – Phpinter

+0

答えが更新されました。 –

関連する問題