몇 가지 네트워킹 애플 리케이션을 작성한 경험이 있기 때문에 좋은 친구가되어 내가 알고있는 사람을 돕고 싶었습니다. (Java가 나의 모국어가 아님) 그래서 그는 도움을 원했던 보너스 지정을 나에게 건네주었습니다. 우리가 잘 못 박힌 것처럼 보이지만, 내 친구에게 전해지는 보너스 할당은 프로그래밍 언어에서 생각한 모든 것을 거스르는 결과를 낳았습니다. 분명히 어떤 프로그래밍 언어로 클래스를 확장한다면 말이다. C++, Java, PHP의 경우 하위 클래스 변수는 보호되거나 공용 인 경우에만 액세스 할 수 있습니다. 분명히 개인적인 일이나 규칙을 어기려는 시도를하는 경우 분명히 조치를 취해야합니다. ... 권리? 여기 방법입니다 당신은 HTML에서 송장을 인쇄 할 수 있도록이 프로그램은 "InvoicePrinter을"이라고 수정해야하고 당신은 InvoiceFormatter자바를 사용하는 비공개 회원에 비공개 멤버 액세스
의 클래스 ECXEPT 중 하나를 수정할 수 없습니다 :
은 분명히 할당이 같았다 프로그램 요약.//Address.java
class Address
{
private String m_name;
private String m_street;
Address(String name, String street)
{
m_name = name;
m_street = street;
}
}
//Invoice.java
class Invoice
{
private Address m_location;
private Products m_products;
Invoice(Address addr)
{
m_location = addr;
}
public void format()
{
//Print data here...
}
}
//InvoicePrinter
class InvoicePrinter
{
int main(//...)
{
Invoice myInvoice = new Invoice(new Address("My company", "12345 n Street Way"));
myInvoice.addProduct(new Product("box", 1.20));
myInvoice.addProduct(new Product("glasses", 5.00));
//Print Invoice on screen...
myInvoice.format();
//Add your invoice printer here here...
}
}
//InvoiceFormater.java
class InvoiceFormater
{
private Invoice myInv;
InvoiceFormater(Invoice invoice)
{
myInv = invoice;
}
public static void format()
{
//Print your HTML formatter here.
}
}
나는 천천히 "InvoiceFormatter"를 확장하고 슈퍼를 사용하는 자바 초보자라도,하지만 난 송장에서 데이터를 추출 할 수있는 방법을 볼 수있는 유일한 일에 돌리겠다,하지만 당신은 여전히 필요 그래서하지 않는 한 주소와 같은 "Invoice"데이터에 대한 액세스 등 ... 그렇다면 int main 또는 InvoiceFormatter를 제외한 코드를 변경하지 않고 어떻게이 작업을 수행 할 수 있습니까? 이 셉션 또는 역설에서 일 같은 소리 때문에
는 ... 내가 인정한다,이
과제는 자기 모순되는 것처럼 보입니다. 당신은'InvoicePrinter' 만 수정할 수있는 클래스이지만'Invoice.format'과'InvoiceFormatter.format' 메쏘드는 여러분에게 그것들을 구현할 것을 요구하고 있습니다. –
Google 자바 리플렉션. – javaHunter
본 지정이 무의미하다고 본 당신의 본능이 맞습니다. 예를 들어'Address' 클래스는 쓰여진 것처럼 완전히 쓸모가 없습니다. 기존 클래스를 수정하는 것이 현명한 방법 일뿐입니다. 이 코드에는 Java가 아닌'int main'과 적절한 Java (또는 C 또는 C++) 주석이 아닌'(// ...)'같은 많은 쓰레기도 있습니다. –