자바 정적 또는 상속 변수

UI UX :

하자 내가 3 개 클래스 A, B, C, 내 홈페이지를 말한다. B 내가 그들 모두 내 주를 포함에 스캐너를 사용하려면 A를 확장합니다. 나는 상속에 의해 스캐너를 이동해야합니다 아니면 정적 사용하고 나의 주 나의 스캐너를 선언해야?

내가 이쪽을 봐하려고 노력하지만, 더 명확한 대답을하지 않았다 : 나는 다른 클래스의 스캐너 개체를 사용할 수있는 방법이 있습니까?

public class Main {
    public static Scanner staticScanner = new Scanner (System.in);
public static void main(String[] args) {
    Scanner sc = new Scanner (System.in);
    A a = new A(sc);
    C c = new C();
    c.cDoSomething(sc);
    sc.close();
    }

public class A {
    private Scanner sc;
    public A (Scanner sc){
    this.sc = sc;
    }
    public void aDoSomething(){
         B b = new B();
         b.bDoSomething(sc);

    }

public class B extends A {
    public void bDoSomething(Scanner sc){

    }

public class C {
    public void cDoSomething(Scanner sc){

    }

나는 내가 더 잘하고 사용할 올바른 하나입니다 방법을 이해하고자 위에 말했듯이. staticScanner 내 메인 클래스하여 전화를 걸거나 필요에 따라 클래스 사이에 내 스캐너 SC 이동

트레버 프리먼 :

여기 답이 필요한 스캐너의 상태가 다른 클래스의 변수와 얼마나 많은 별도의 방법이나 호출의 상태로 할 수있는 방법을 결합에 특히 관해서 기본 클래스와 상황의 세부 사항의 일부에 의존 할 수 있다고 생각 .

그러나 일반적으로, 나는 개인적으로 선호하는 c.doSomething(sc);메소드 호출 사이의 클래스 C에 보관되고 더 내부 상태가없는 경우. 즉 우리는이없는 c.doSomething1(sc)c.doSomething2(sc)그 필요성으로 인해 내부 상태가 수정되는 동일한 스캐너에 대한 순서로 호출 할 수 C.

우리가 생성자의 클래스에 스캐너를 통과하고 그것에 대한 참조를 유지하는 완벽한 의미가있는 스캐너 래퍼 (또는 장식의 형태)을 효과적으로 무엇 만드는 경우 카운터 인수는 것을. 즉 우리는 같은 것을 갖고 싶어 :

MyReader reader = new MyReader(scanner);
MyObject myObject = reader.readNextMyObject();

그러나, 나는 우리가 코드에서 인터리브 여러 래퍼를 통해 같은 스캐너에서 읽는다면 그것은 매우 혼란 스러울 것이라고 생각 :

// I think the below would be UGLY, at least imho.
MyReaderA readerA = new MyReaderA(scanner);
MyReaderB readerB = new MyReaderB(scanner);
MyObjectX obj1 = readerA.readMyObject();
MyObjectY obj2 = readerB.readMyObject();

나는 두 개의 다른 독자가 같은 스캐너를 운영하고 인덱스를 이동하는 것을 혼동 될 것이다 생각합니다.

추천

출처http://43.154.161.224:23101/article/api/json?id=229726&siteId=1