0

私は OOP を初めて使用し、言語の OOP 性を理解するのに非常に苦労しています。私は「C」プログラミングのかなりしっかりした背景を持っており、そのタスクのロジックと実行は非常に合理的で直感的です。OOP では、私のような初心者がクラスの利点を理解し、それらを利用することは非常に困難です。要するに、私はプログラムを書きたいと思っています.2つのクラス間の相互作用を説明するための非常に単純なプログラムです.「getInput」クラスのオブジェクトをインスタンス化することによってユーザー入力を可能にするクラスを呼び出す1つの「母」クラスと、次に、「母」クラスのオブジェクトを呼び出して、その入力を出力します。以下は、これを達成するために使用しようとした疑似コードですが、失敗しました:

public class mother {
    public static void main(String[] args){

        GetUserInput userInput = new GetUserInput();  //Here I create an object in GetUser input class that I want to reference in the mother class to get output
        System.out.println(input);

    }                       
} 


import java.util.Scanner;

public class GetUserInput {
     public String input;

     Scanner userInput = new Scanner(System.in);
     input = userInput.next();

}

このコード タイプが失敗する理由がわかりません。マザークラスでオブジェクトをインスタンス化しました。次に、ユーザー入力を許可するスキャナー クラスのオブジェクトをインスタンス化しました。このコードが機能しない理由がわかりません。

4

2 に答える 2

1

OOP クラスは、構造体 (フィールド) とそれを操作する関数 (メソッド) の組み合わせと考えてください。(これは文字通り、C++ でクラスがどのように機能するかです。) クラス本体内に記述された行 (変数宣言など) は、基本的に、クラスのコンストラクターと組み合わせた構造体初期化子です。これらの行は、実際にはコンパイラによってコンストラクタ メソッドにコピーされます。

すべての種類のランダム コードをイニシャライザ内に配置することは意味がありません。Java では、ほとんどの場合、クラス本体自体に配置できる唯一のコードは、変数の宣言と初期化です。

この特定のケースでは、GetUserInputクラスはあまり意味がありません。構造体として、単一の文字列コンポーネントしか持たず、それに付随する興味深い関数はありません。String代わりに を使用してください。興味深い処理がある場合は、構造体 (int quantity, price;または何でも) に含めるフィールドを宣言Scannerし、入力として を受け取り、それらの値を有用なものに設定するコンストラクターを記述します。

(注として、クラスは一般に名詞に似ており、それらのメソッドは一般に動詞に似ており、命名規則はこれを反映しています。UserInputより明確になります。)

あなたが話していることに基づいて、メインクラスの疑似コードを次に示します。

public class Main {
    public static void main(String[] args) {
        Scanner inputScanner = new Scanner(System.in);
        UserInput input = new UserInput(inputScanner);
        System.out.println(input.getInput());
    }
}
于 2013-10-14T01:37:15.257 に答える