假設抽象超類包含一個名爲price類型爲double的私有變量。使用重寫抽象方法從超類訪問私有變量
現在假設變量已被聲明但未初始化。超類包含訪問方法,但是setter方法是抽象的,因此它必須在子類中重寫,但是,由於超級變量是私有的,有沒有辦法從子類初始化這個變量?
考慮下面的例子:我有4個類; Book(抽象超級),NonFiction(子),Fiction(子),Tester(類來測試會發生什麼)。
Book類:
public abstract class Book {
private String title;
private double price;
Book(String name){
title = name;
}
public String getTitle(){
return title;
}
public double getPrice(){
return price;
}
public abstract void setPrice(double cost);
}
的小說類
public class Fiction extends Book{
Fiction(){
super("Harry-Potter");
setPrice(24.99);
}
@Override
public void setPrice(double cost) {
}
}
非小說類類
公共類非小說類作品延伸預訂{
NonFiction(){
super("Head-first Java");
setPrice(37.99);
}
public void setPrice(double cost) {
}
}
測試機柯樂小號
public class Challenge {
public static void main(String[] args){
Fiction fictionBook = new Fiction();
NonFiction NonFictionBook = new NonFiction();
Book[] theList = new Book[2];
theList[1] = NonFictionBook;
theList[0] = fictionBook;
System.out.println("Title of fiction book: \n"+theList[0].getTitle());
System.out.println("Title of non fiction book \n"+theList[1].getTitle());
System.out.println("Title - "+theList[0].getTitle()+" -" + theList[0].getPrice());
System.out.println("Title - "+theList[1].getTitle()+" -" + theList[1].getPrice());
}
}
預期的輸出應該是:
小說書名: 哈利波特 標題非小說類文學作品的: 頭第一個Java 標題,哈利·波特的成本 - $ 24.99 標題,頭 - 第一個Java成本 - $ 37.99
有沒有辦法訪問私有變量而不需要將範圍更改爲受保護的?
哦,是的,就像字符串如何默認初始化爲null。 另外,如果其中一個訪問器方法是抽象的,並且封裝變量是私有的,那麼訪問器基本不工作? – RamanSB
@Ramandeep:是的,任何引用類型都被初始化爲null。 –
@Ramandeep:子類無法在超類中看到私有變量。 –