我正在阅读的这本书说我不能,但我的计划证明不是这样。例如,下面的代码编译得很好,即使我尝试访问父类的私有属性。然后我可以自由地打印它们。任何人都可以告诉我这本书是错的,还是我做错了什么?
class Asset
{
private int Id;
private String type;
public int getId()
{
return Id;
}
public String getType()
{
return type;
}
public void setId(int Id)
{
this.Id=Id;
}
public void setType(String type)
{
this.type=type;
}
public void printDescription()
{
System.out.println("Asset Id: "+Id);
System.out.println("Asst type: "+ type);
}
}
class BankAccount extends Asset
{
private String bankName;
private int accountNumber;
private float balance;
public String getBankName()
{
return bankName;
}
public int getAccountNumber()
{
return accountNumber;
}
public float getBalance()
{
return balance;
}
public void setBankName(String bankName)
{
this.bankName=bankName;
}
public void setAccountNumber(int accountNumber)
{
this.accountNumber=accountNumber;
}
public void setBalance(float balance)
{
this.balance=balance;
}
public void printDescriptionnn()
{
System.out.println("The Bank name is: "+ bankName);
System.out.println("Account number: "+ accountNumber);
System.out.println("Your balance is: "+ balance);
}
}
public class AssetTest
{
public static void main(String[] args)
{
BankAccount llogari= new BankAccount();
Scanner input = new Scanner(System.in);
Scanner sinput= new Scanner(System.in);
System.out.print("Type the ID of your asset: ");
llogari.setId(input.nextInt());
System.out.print("Type the type of your asset: ");
llogari.setType(sinput.nextLine());
System.out.print("Give the bank name: ");
llogari.setBankName(sinput.nextLine());
System.out.print("Type the Account Number: ");
llogari.setAccountNumber(input.nextInt());
System.out.print("Type your balance: ");
llogari.setBalance(input.nextFloat());
llogari.printDescription();
llogari.printDescriptionnn();
}
}`
答案 0 :(得分:3)
您可以通过public
或protected
获取者访问它们,但无法直接访问private
属性。在您的示例中,您使用public
setter来修改属性。您可以通过public
方法访问它们。
因此,为了回答您的问题,private
成员不继承子类。或者,您可以拥有由子类继承的protected
个成员。
来自Java Language Specificiation
声明为private的类的成员不会被该类的子类继承。
只有声明为protected或public的类的成员才会被声明在声明类之外的包中声明的子类继承。
答案 1 :(得分:2)
因为您没有直接修改父类的元素。您正在调用修改私有元素的公共函数,这完全有效。
答案 2 :(得分:1)
子类无法直接访问超类的private
成员。它只能直接访问public
和protected
成员。
在此上下文中,直接访问意味着:super.member
如果超类实现了protected或public accessor或mutator方法,那么您可以间接访问它们。间接访问看起来像:super.getMember()
或super.doSomething()
。
答案 3 :(得分:0)
任何子类都没有权限直接访问超类的私有成员。它可以访问公众和受保护的成员。