머낭
60
2019-04-08 20:24:11 작성 2019-04-08 20:53:11 수정됨
5
418

Java 질문(public)


자바에서 패키지 두개(A, B)를 만들고 A에 BookEx클래스에

class Book{

int bid;

String title;

String publisher;

int price;

static private int cnt;

static private float avg = 0;

public Book(int bid, String title, String publisher, int price){

this.bid = bid;

this.title = title;

this.publisher = publisher;

this.price = price;

cnt++;

avg += price;

}

public void printInfo() {

System.out.println(bid+" "+title+" "+publisher+" "+price);

}

static public float calcAvg(){

return avg/(float)cnt;

}

}

public class BookEx {

public static void main(String[] args) {

}

}

 요거를 만들고

B패키지에서 Exam클래스에

(import java.awt.print.Book; import A.BookEx; 요거 했습니다)

Book []book = new Book[3];

Scanner sc= new Scanner(System.in);

for(int i=0; i<book.length; i++) {

System.out.print("input bid title publisher price: ");

book[i] = new Book(sc.nextInt(), sc.next(), sc.next(), sc.nextInt());

}

for(int i = 0; i<book.length; i++)

book[i].printInfo();

System.out.println("Book avg: "+Book.calcAvg());

이렇게 만들었는데 빨간줄 에러

The constructor Book(int, String, String, int) is undefined

The method printInfo() is undefined for the type Book

The method calcAvg() is undefined for the type Book

이렇게 뜨는데 어떻게 해결해야되나요??


0
  • 답변 5

  • 제르맹
    315
    2019-04-08 21:15:47

    빨간줄에 있는 Book 객체는 A패키지의 Book이 아니라 java.awt.print에 있는 Book 객체입니다. A.패키지의 Book객체를 임포트도 안되어있고 접근제어자도 default 이므로 다른 패키지에서 임포트 불가능 합니다.

  • 머낭
    60
    2019-04-08 21:32:12 작성 2019-04-08 21:48:08 수정됨

     제르맹

     import A.BookEx;요거는 했는데 A패키지의 Book객체 임포트는 따로 해야하나요? 그리고  awp 저거는 지웠고  접근제어자 default라는게 어느 부분 말씀하시는건가요?

  • 제르맹
    315
    2019-04-08 22:39:12 작성 2019-04-08 22:39:50 수정됨

    머낭

    import A.BookEx; 는 특정 한 클래스 BookEx 만 가져오고

    import A; 라고하면 이 패키지 전부를 가져옵니다

    class 정의시 

    class 클래스명 {} 는 default class 클래스명 {} 와 같습니다.

    접근제어자 public, protected, default, private 의 차이를 이참에 알아두시는게 좋겠군요

  • 머낭
    60
    2019-04-08 22:44:05

     제르맹

    그냥 import A; 하니까 

    The import A cannot be resolved

    이렇게 오류가 나오는데

    요거는 어떤건가요?

    그리고 클래스는 밑에 메인에 public이 있어서 두개를 사용 못한다고 들어가지고요

    그러면  class를 따로 생성하지말고 public class BookEx안에 다가 위에쓴 class Book 에있는걸 집어넣어야 할까요?

  • 제르맹
    315
    2019-04-08 23:08:12 작성 2019-04-08 23:09:09 수정됨

    머낭

    제가 착각했네요

    해당 패키지 전체를 import 하려면 

    import A.*; 라고 해야합니다.

    그리고 자바에선 1개파일에 1개 클래스를 원칙으로합니다. inner class는 예외구요

    파일명과 클래스명이 일치해야하고요.

    일단 A패키지에 있는 두 클래스는 파일 분리해서 정의하시고 

    import A.Book; 이나 import A.*; 로 해보세요

  • 로그인을 하시면 답변 을 등록할 수 있습니다.