2017-12-11 3 views
-7

저는 A, B, Main이라는 세 가지 클래스가 있습니다. 클래스 Main은 클래스 A를 확장하고 B는 Main을 확장합니다.Java 상속이 작동하지 않습니다.

class A{ 

    ArrayList<ABC> arr= new ArrayList<>(); 

    void addData(){ 
     a(); 
    } 

    void add(){ 
     ABC abc1 = new ABC("qwer", "qwer", "qwer", 4, 1, "qweqw", "qweqwe"); 
     ABC abc2 = new ABC("qwer", "qwer", "qwer", 4, 1, "qweqw", "qweqwe"); 
     arr.addAll(Arrays.asList(abc1,abc2)); 
    } 
} 

주요

class Main extends A{ 
    public static void main(String[] args) throws Exception{ 
     A a = new A(); 
     a.add(); 
     B b = new B(); 
     b.choose(); 
    } 
} 

B

class B extends Main{ 
    Main m = new Main(); 
    void choose() throws Exception { 
     System.out.println(m.arr.size()); 
    } 
} 

하지만 클래스 B에 배열 크기를 확인해볼 때 클래스 B.에 작동하지 않는 확장을 Main에 추가 된 2 개의 항목 대신 0을 반환합니다.

상속이 어떻게 작동하는지 오해했거나 코드 자체에 문제가 있습니까?

답변

0
Main m = new Main(); 

class B에서이 코드는 단순히 Main class의 객체를 생성합니다. 이 후 arrayList을 채우기 위해 이것을 호출해야합니다.

m.add() 
+0

고마워요! 문제를 해결하는 데 도움이 되었기 때문에 대답을 수락했습니다. – user347935

2

A 클래스와 B 클래스 중 하나를 만드는 중입니다. 또한 B의 인스턴스를 만들 때 (Main m = new Main();)의 인스턴스 변수로 Main이라는 또 다른 인스턴스를 만듭니다.

그런 다음 당신은 단지 첫 번째 인스턴스 (a.add())에 대한 add를 호출, 그래서 List은 (당신이 m.arr.size() 전화 때문에) 비어 Main 인스턴스의 List입니다 b.choose()에 대한 호출에 의해 액세스.

이것은 "상속 작동 방식"과 아무 관련이 없습니다. 클래스의 인스턴스 (오브젝트)마다 다른 값을 포함하는 ArrayList<ABC> arr과 같은 인스턴스 변수와 관련이 있습니다.

+0

무엇이 잘못되었는지 주셔서 감사합니다. :) – user347935

관련 문제