2012-10-31 3 views
-3

나는 bank라는 서브 클래스와 ATM이라는 서브 클래스를 만들었고 서브 클래스 ATM의 인스턴스를 선언하고자합니다. 아래에 표시된대로 선언하면 오류가 발생합니다. 개인 및조차 생성자의서브 클래스의 인스턴스 선언하기

package bank; 
import java.util.Scanner; 
public class Bank {// Bank class 
    protected int PIN,chequing_balance,savings_balance; 
    public void set_PIN(int PIN){ 
    this.PIN= PIN; 
} 
public int get_PIN(){ 
    return this.PIN; 
} 
public void set_chequing_balance(int chequing_balance){ 
    this.chequing_balance=chequing_balance; 
}  
public int get_chequing_balance(){ 
    return chequing_balance; 
} 
public void set_savings_balance(int savings_balance){ 
    this.savings_balance=savings_balance; 
}  
public int get_savings_balance(){ 
    return savings_balance; 
} 




public class ATM extends Bank{// ATM is a subclass of Bank 
    private void ATM(){ 
    PIN=1207605; 
    chequing_balance=0; 
    savings_balance=0; 
} 
    public void deposit_savings(int amount){ 
    this.savings_balance+=amount; 
} 
    public void withdrawl_savings(int amount){ 
    this.savings_balance-=amount; 
} 
     public void transfer_savings_to_chequing(int amount){ 
    this.chequing_balance+=amount; 
    this.savings_balance-=amount; 
} 
     public void deposit_chequing(int amount){ 
    this.chequing_balance+=amount; 
} 
    public void withdrawl_chequing(int amount){ 
    this.chequing_balance-=amount; 
} 
     public void transfer_chequing_to_savings(int amount){ 
    this.savings_balance+=amount; 
    this.chequing_balance-=amount; 
} 

} 
    public static void main(String[] args) { 
     int key,amount; 
     ATM x= new ATM(); // declaration of instance of ATM subclass 
     Scanner input= new Scanner(System.in); 
     do{ 
      System.out.println("Please enter transaction type 1.Deposit, 2. Withdraw 3. Transfer "); 
      key=input.nextInt(); 

     }while(key<1||key>3); 
    do{ 
     System.out.println("Please enter desired amount"); 
     amount=input.nextInt(); 
    }while(amount<0); 
    if (key==1) 
    { 
     System.out.println("Please enter account desired 1. Chequing 2. Savings"); 
     key=input.nextInt(); 
     if (key==1) 
     { 
      x.deposit_chequing(amount); 
     } 
     else if(key==2) 
     { 
      x.deposit_savings(amount); 
     }  
    } 
    else if (key==2) 
    { 
     System.out.println("Please enter account desired 1. Chequing 2. Savings"); 
     key=input.nextInt(); 
     if(key==1) 
     { 
      x.deposit_chequing(amount); 
     } 
     else if(key==2) 
     { 
      x.deposit_savings(amount); 
     } 
    } 
    else if(key==3) 
    { 
    System.out.println("Please enter type of transaction you want 1. Chequing to Savings 2. Savings to Chequing"); 
    key=input.nextInt(); 
    if (key==1) 
    { 
     x.transfer_chequing_to_savings(amount); 
    } 
    else if (key==2) 
    { 
     x.transfer_savings_to_chequing(amount); 
    } 
    } 
} 
} 
+2

그리고 오류는 ...? –

+0

새 ATM을 만들 때 내 생성자를 만든 후 여전히 내 기본 메서드에서 '정적 변수가 아닌 정적 변수입니다. 정적 컨텍스트에서 참조 할 수 없습니다.' – noname

답변

2
private void ATM(){ 

, 그것은 방법입니다. 생성자에는 반환 유형이 없어야합니다.

또한 ATM은 은행을 확장해서는 안됩니다. 반환 유형을 선언하지 말아야

+1

부모에 생성자가 없습니다. – doublesharp

+0

@doublesharp 아무 문제가 없지만 컴파일러는 매개 변수없이 기본 공용 생성자를 설정합니다. –

+0

@LuiggiMendoza 그래, 그게 내가 말한거야 ... 기본 생성자 밖에서,이 계층 구조에 설정된 것은 아무것도 없다. – doublesharp

0

귀하의 생성자가 있어야한다 : 당신은 서브 클래스가있을 때

public ATM() { 
    .... 
} 

은 또한 그것이 IS-A 테스트를 통과해야한다. 적절한 하위 클래스가 되려면 모든 하위 클래스에서이 테스트에 대해 yes로 대답해야합니다. ATM IS-A 은행? 흠. ATM의 수퍼 클래스를 생각해 낼 수는 있지만 은행은 그렇지 않을 수도 있습니다. 은행은 많은 ATM을 소유하고있을 수 있습니다. ATM IS-A AccountAccessPoint 또는 IS-A CashDispenser. 그러나 이것은 모델링 운동의 더 많은 것입니다.

+0

프로그래밍 과정에 실험실이 있으며 교수는 그 모델을 사용하기를 원합니다. ATM은 은행 계좌가 있고 ATM이 은행 계좌의 인터페이스 (일반적인 사용법)를 구현한다는 점에서 은행 계급의 하위 클래스입니다. 이 실험실에서는 하나의 은행 계좌가 있다는 사실을 포함하여 몇 가지 가정이 있습니다. – noname

+0

교수님은 나쁜 습관을 가르쳐 주시는 데 슬프게도 교수님은 IS-A 관계와 어떻게 적용 할 수 있는지 알고 있습니다. 그래서 당신은 당신의 질문에 대해 더 똑똑합니다. 왜 ATM이 은행을 하위 분류하고 왜 IS-A 테스트를 통과하지 못했는지 교수님에게 물어보십시오. 그/그녀가하는 말을보기 만하면됩니다. :-) – chubbsondubs

+0

하하 처음으로 자바에서 프로그래밍 할 수 있습니다. 전에 C++에서 Object Oriented를했지만 Java는 조금 다릅니다. – noname

관련 문제