2014-02-08 5 views
0

나는 수퍼 클래스, 추상화 등에 대해 읽었다. 나는 일반적인 아이디어의 대부분을 이해한다. 현재 3 개의 클래스가 있습니다. (주, 수퍼 클래스, 서브 클래스)자바의 수퍼 클래스에서 데이터 반환하기

1 등급 : 자동차의 종류에 대해 사용자 마일과 갤런을 가져 와서 데이터를 서브 클래스로 보냅니다. 하위 클래스는 데이터를 변수로 설정합니다.

나는 차를 위해 갤런 당 마일을 인쇄하는 방법을 계산하려고 노력하고있다. 이 계산 방법은 수퍼 클래스 내에 있지만 메서드를 인쇄 할 방법을 찾을 수 없습니다. 다음은 내 코드입니다 :

홈페이지


import java.util.Scanner; 
public class StartingPoint { 

    public static void main (String[]args) 
    { 
     Scanner input = new Scanner(System.in); //Get user input 

     Mercedes mCar = new Mercedes(); //Accesses subclass of the Car superclass (Mercedes) 
     Toyota tCar = new Toyota(); //Accesses subclass of the Car superclass (Toyota) 

     System.out.println("Do you own a mercedes or a toyota?"); //Get car type 

     String carName = input.nextLine(); 

     if (carName.charAt(0) == 'm' || carName.charAt(0) == 'M') 
     { 
      System.out.println("How many miles have you travelled?"); 
      double miles = input.nextDouble(); 

      System.out.println("How many gallons have you used?"); 
      double gallons = input.nextDouble(); 

      mCar.setGallons(gallons); 
      mCar.setMiles(miles); 

     } 

     else if (carName.charAt(0) == 't' || carName.charAt(0) == 'T') 
     { 
      //NOT CODED YET 
     } 

     else 
     { 
      System.out.println("Not a valid car name for the system..."); 
     } 





    } 

} 

슈퍼 클래스


public abstract class Car { 

    public double calcMPG(double miles, double gallons) 
    { 
     return (miles/gallons); 
    } 
} 

슈퍼 클래스 (자동차)의 서브 클래스


public class Mercedes extends Car { 

    private double miles; 
    private double gallons; 

    public Mercedes() 
    { 
     miles = 0; 
     gallons = 0; 
    } 

    public void setMiles(double inputMiles) 
    { 
     miles = inputMiles; 
    } 

    public void setGallons(double inputGallons) 
    { 
     gallons = inputGallons; 
    } 







} 
+0

이 줄을 내 주 수업에 추가했습니다.이 방법을 사용하는 것이 가장 좋은 방법인지는 확실하지 않습니다. System.out.println (Mercedes.calcMPG (miles, gallons)); – KnowledgeGeek

+0

메르세데스 클래스에 메쏘드 (calc)를 추가하고 super.calcMPG (miles, gallons)를 호출하고 그 메쏘드 print .. System.out.println (super.calcMPG (miles, gallons) and – KnowledgeGeek

답변

0

좋아, 그래서이 내가 CALC이라는 방법을 만들어 내 메르세데스 클래스에서이 ..

를 해결하는 방법입니다. 내가 호출 한 메소드 내부 : System.out.print (super.calcMPG (miles, gallons));

위로 주요 방법으로 mCar.calc();

이렇게하면 모든 데이터를 성공적으로 계산하여 인쇄합니다.

+0

상속을 사용하는 것은 좋은 생각이라고 생각하지 않습니다. 'Car' 수퍼 클래스의 유일한 목적은'calcMPG '메서드를 사용 가능하게 만드는 것입니다. 수퍼 클래스는 다음을 수행해야합니다. 정당화하기 위해 _standalone_ 사용의 더 많은 것을 가지고 있습니다.하지만 당신은 자바를 사용하기 시작한 것을 볼 수 있습니다. – tilois

+0

확인해 주셔서 감사합니다. 나는이 이해에 처음이지만, 나는 모든 것이 서로 어떻게 상호 작용하는지 더 실험하고있다. 나는 오늘 그 생각에 대한 나의 이해를 향상시키기를 바라고있다. – KnowledgeGeek

0

수퍼 클래스에서 toString 메서드를 무시한 다음 System.out.print으로 개체를 간단히 인쇄하면됩니다. 이 작업을하려면 수퍼 클래스를 재구성하고 조금 하위 클래스를 만들어야합니다. 이것이 내가 해낸 방법이고 효과가 있지만, 그것이 당신이 원하는 것인지 확신 할 수 없습니다. 희망이 어떤 식 으로든 도움이됩니다.

홈페이지 방법 :

package CarProject; 

import java.util.Scanner; 
public class StartingPoint { 

    public static void main (String[]args) 
    { 
     Scanner input = new Scanner(System.in); //Get user input 

     Mercedes mCar = new Mercedes(); //Accesses subclass of the Car superclass (Mercedes) 
     Toyota tCar = new Toyota(); //Accesses subclass of the Car superclass (Toyota) 

     System.out.println("Do you own a mercedes or a toyota?"); //Get car type 

     String carName = input.nextLine(); 

     if (carName.charAt(0) == 'm' || carName.charAt(0) == 'M') 
     { 
      System.out.println("How many miles have you travelled?"); 
      double miles = input.nextDouble(); 

      System.out.println("How many gallons have you used?"); 
      double gallons = input.nextDouble(); 

      mCar.setGallons(gallons); 
      mCar.setMiles(miles); 

     } 

     else if (carName.charAt(0) == 't' || carName.charAt(0) == 'T') 
     { 
      System.out.println("How many miles have you travelled?"); 
      double miles = input.nextDouble(); 

      System.out.println("How many gallons have you used?"); 
      double gallons = input.nextDouble(); 

      mCar.setGallons(gallons); 
      mCar.setMiles(miles); 
     } 

     else 
     { 
      System.out.println("Not a valid car name for the system..."); 
     } 

     if (carName.charAt(0) == 't' || carName.charAt(0) == 'T') { 

      System.out.println("Miles per gallon for your Toyota is " +tCar); 

     } else if (carName.charAt(0) == 'm' || carName.charAt(0) == 'M') { 

      System.out.println("Miles per gallon for your Mercedes is " + mCar); 

     } 
    } 
} 

슈퍼 클래스

package CarProject; 

public class Car { 

    double miles; 
    double gallons; 

    @Override 
    public String toString() { 
     return String.valueOf(miles/gallons); 
    } 

} 

서브 클래스 메르세데스

package CarProject; 

public class Mercedes extends Car { 

    public Mercedes() 
    { 
     miles = 0; 
     gallons = 0; 
    } 

    public void setMiles(double inputMiles) 
    { 
     miles = inputMiles; 
    } 

    public void setGallons(double inputGallons) 
    { 
     gallons = inputGallons; 
    } 
} 

서브 클래스 도요타

package CarProject; 

public class Toyota extends Car { 

    public Toyota() 
    { 
     miles = 0; 
     gallons = 0; 
    } 

    public void setMiles(double inputMiles) 
    { 
     miles = inputMiles; 
    } 

    public void setGallons(double inputGallons) 
    { 
     gallons = inputGallons; 
    } 
} 
+0

슈퍼 클래스'Car'가'miles'이나'gallons' 필드를 모르기 때문에 이것은 작동하지 않을 것입니다. 그것들은 오직 유일한 방법이다. – tilois

+0

수퍼 클래스 인'Car'를 조금 변경했는데 이제는'miles'과'gallons'을 구현했습니다. 모든 유형의 자동차는 해당 필드를 상속하며 각 자동차마다 다르게 설정할 수 있습니다. 이런 방식으로 작동해야합니다. 자바에서도 처음입니다. – msmolcic

0
import java.io.*; 

class parent { 
    int a; //VARIABLE DECLARATIONS IS ALLOWED ONLY HERE 

    public void get1() throws Exception { 
     DataInputStream in = new DataInputStream(System.in); 
     System.out.print("\n ENTER THE INTEGER:"); 
     a = Integer.parseInt(in.readLine()); 
    } 
} 

class child extends parent { 
    int b; //VARIABLE DECLARATIONS IS ALLOWED ONLY HERE 

    public void get2() throws Exception { 
     DataInputStream in = new DataInputStream(System.in); 
     System.out.print("\n ENTER THE INTEGER:"); 
     b = Integer.parseInt(in.readLine()); 
    } 
} 

public class sample { 
    public static void main(String args[]) throws Exception { 
     child obj = new child(); 
     obj.get1(); 
     obj.get2(); 
     System.out.println("\n SUM="+(obj.a+obj.b)); 
    } 
} 
+0

Stackoverflow에 오신 것을 환영합니다. OP 질문에 대한 답변을 제공해 주셔서 감사합니다. 대답에 약간의 설명을 추가하면 OP 및 향후 다른 독자에게 더 유용 할 것입니다. 좋은 답변을 작성하는 방법은 https://stackoverflow.com/help/how-to-answer를 참조하십시오. –

+0

답변에 대한 추가 설명을 추가하십시오. – Mostafiz