0

私は、Javaプログラムで複数のインタフェースを実装する方法を理解しようとしています。Javaで複数の継承を実装する

私のプログラムでは、3つのクラス(footballPlayer、student、person)を組み込んだ大学サッカー選手クラスを実装したいと考えています。

public class app { 
public static void main(String[] args) 
    { 
    student st1 = new student("Zack","Mills",22); 
    System.out.println(st1.getAllInfo()); 
    footballPlayer fp1 = new footballPlayer("Zack","Mills",22,5.9f, 240,"Junior","Running Back"); 
    System.out.println(fp1.getAllInfo()); 
    } 
} 

public class person { 
//---------Declaring attributes---- 
private String firstName; 
private String lastName; 
private int age; 
//------------------------------ 
//----------Constructor------------ 
person(String a, String b, int c) 
{ 
     firstName = a; 
     lastName = b; 
     age = c; 
} 
//---------- METHODS -------- 
String getInfo() 
{ 
     return "NAME = "+getFirstName()+ " "+getLastName()+" "+"Age = "+ getAge(); 
} 
//------------------------------------------------ 
/** 
    * @return the firstName 
    */ 
public String getFirstName() { 
     return firstName; 
} 
/** 
    * @param firstName the firstName to set 
    */ 
public void setFirstName(String firstName) { 
     this.firstName = firstName; 
} 
/** 
    * @return the lastName 
    */ 
public String getLastName() { 
     return lastName; 
} 
/** 
    * @param lastName the lastName to set 
    */ 
public void setLastName(String lastName) { 
     this.lastName = lastName; 
} 
/** 
    * @return the age 
    */ 
public int getAge() { 
     return age; 
} 
/** 
    * @param age the age to set 
    */ 
public void setAge(int age) { 
     this.age = age; 
    } 


} 

public class footballPlayer extends person { 

//-----------FOOTBALL PLAYER ATTRIBUTES---------------------------- 
private float height; 
private float weight; 
private String experience; 
private String position; 




footballPlayer(String fn, String ln, int ag,float ht, float wt, String exp, String pos) 
{ 
    super(fn, ln, ag); 
    height = ht; 
    weight = wt; 
    experience = exp; 
    position = pos; 
} 
/** 
* @return the height 
*/ 
public float getHeight() { 
    return height; 
} 
/** 
* @param height the height to set 
*/ 
public void setHeight(float height) { 
    this.height = height; 
} 
/** 
* @return the weight 
*/ 
public float getWeight() { 
    return weight; 
} 
/** 
* @param weight the weight to set 
*/ 
public void setWeight(float weight) { 
    this.weight = weight; 
} 
/** 
* @return the experience 
*/ 
public String getExperience() { 
    return experience; 
} 
/** 
* @param experience the experience to set 
*/ 
public void setExperience(String experience) { 
    this.experience = experience; 
} 
/** 
* @return the position 
*/ 
public String getPosition() { 
    return position; 
} 
/** 
* @param position the position to set 
*/ 
public void setPosition(String position) { 
    this.position = position; 
} 
String getAllInfo() 
{ 
    return getFirstName() + " " + getLastName() + " " + getAge() + " " + " " + getHeight() + " " + getWeight() + " " + getExperience() + " " + getPosition(); 
} 

private String status; 
} 

public class student extends person { 

private String status; 
student(String informedFirstName, String informedLastName, int informedAge) 
{ 
    super(informedFirstName, informedLastName, informedAge); 
    if (getAge() <= 25) status = "Traditional"; 

} 
String getStatus() 
{ 
    return this.status; 
} 
public void setStatus(String status) 
{ 
    this.status = status; 
} 

String getAllInfo() 
{ 
    return getFirstName() + " " + getLastName() + " " + getAge() + " " + getStatus(); 
} 
} 

public class CollegefootballPlayer { 

//attributes of football player and student 

} 
+1

複数のインターフェイスをjavaで実装することはできますが、複数のクラスを拡張することはできません。あなたが望むことをするためには、生徒とサッカープレーヤをインターフェイスに変える必要があります。関連はありませんが、コードを適切にインデントして、Java命名規則(クラス名を大文字にする)に従うと、コードを読みやすく(したがってより簡単に)手助けすることができます。 – nhouser9

+0

複数のインタフェースの実装!=多重継承 – azurefrog

+2

Javaは複数のオブジェクト/クラスからの多重継承をサポートしていません。単一のクラスから拡張し、複数の 'インタフェース 'を'実装する'ことができます。あなたが賢い人なら、クラスを連鎖させて、 'Person' - ' 'Student' - ' 'FootballPlayer' – MadProgrammer

答えて

1

私はコメントにも追加しますが、まだそのようにする評判はありません。とにかく、他のものはJavaでの多重継承の欠如について正しいです。インタフェースの操作に加えて、継承の代わりにオブジェクトの構成についての議論もあります。

は、ここで対象のスレッドです:

Advantages of composition over inheritance in Java

組成物は多大な柔軟性が付属しています。新しいクラスのメンバオブジェクトは通常プライベートなので、クラスを使用しているクライアントプログラマはアクセスできません。これにより、既存のクライアントコードを妨げずにメンバーを変更することができます。実行時にメンバオブジェクトを変更して、プログラムの動作を動的に変更することもできます。次に説明する継承では、継承を使用して作成されたクラスにコンパイル時の制限を設定する必要があるため、この柔軟性はありません。

職業や趣味/スポーツのような属性のリストを持つ人のクラスを維持することができます。

+0

正確に。確かに、人/学生/サッカープレイヤーとの例を考えれば、より良い選択です – Matt