2017-12-23 11 views
2

私はJava/OOPをやって学びたいと思っています。私は "熊"オブジェクトからname属性を出力しようとしています。私はGoogleで見てきましたが、何を検索するかわかりません。印刷文以外はすべてでなければなりません。オブジェクトの属性を印刷する方法は?

public class test 
{ 
    public static void main(String args[]) 
    { 
     System.out.println(NFCnorth.bears.name); 
    } 
} 

class Team 
{ 
    String name; 

    public Team(String name) 
    { 
     this.name=name; 
    } 
} 

class NFCnorth 
{ 
    private String divisionName="NFC North"; 

    Team vikings=new Team("Minnesota Vikings"); 
    Team bears=new Team("Chicago Bears"); 
    Team packers=new Team("Green Bay Packers"); 
    Team lions=new Team("Detroit Lions"); 
} 
+1

カプセル化はそのままの状態で行われますが、それは違反されたデータ隠蔽です。 – nicomp

答えて

0

あなただけ(それはあなたのmainから見えるだと仮定して)、それをアクセスすることができました:

System.out.println(bears.team); 

しかし、慣用的なアプローチは、その名前のgetterを持つクラス Teamを提供するために、次のようになります。

public class Team { 
    String name; 

    public Team(String name) { 
     this.name=name; 
    } 

    public String getName() { 
     return name; 
    } 
} 

メインから使用してください:

System.out.println(bears.getName()); 
+0

いつもこのタイプミスハハ、getName *と返信名です* –

+1

@RafatRifaieうん、良いキャッチ、ありがとう。 – Mureinik

+0

Np、私は実際にそれを羨ましく思っています。私がよく書いたコードの唯一のバグは愚かなタイプミスです。P –

-1

いずれかの定数を使用します。

public static final Team VIKINGS = new Team("Minnesota Vikings"); 
public static final Team BEARS = new Team("Chicago Bears"); 
public static final Team PACKERS = new Team("Green Bay Packers"); 
public static final Team LIONS = new Team("Detroit Lions"); 

またはあなたが最初NFCnorthをインスタンス化する必要があります。また、良いOOPでは、カプセル化を適用し、属性にゲッターを作成する必要があります(少なくともJavaではいくつかの言語がゲッターに異なる規則を使用しますが、属性にアクセスしてゲッターでプロパティにアクセスするのに構文上の違いはありません):

new NFCnorth().getBears().getName() 
0

は、次のいずれかのようNFCnorthの静的にクマフィールドを

System.out.println(new NFCnorth().bears.name); 

を行うか行う必要があります。

static Team bears=new Team("Chicago Bears"); 

OOPには様々なクラスのオブジェクトがあります。指定されたクラスの各オブジェクトは、同じセットのフィールド(異なる値を持つことができます)を持ちます。このクラスのすべてのオブジェクトがそのようなフィールドを持つように、フィールドベアを持つようにNFCnorthクラスを定義しました。 NFCnorthクラスのオブジェクトを取得するには、new NFCnorth()で作成する必要があります。クラスそのものにはフィールドがないので、NFCnorth.bearsは違法です。

フィールドを静的にマークすると、クラス内のフィールドになり、NFCnorth.bearsが正常になります。

関連する問題