[英]inheritance and protected class java
錯誤:mul(int,int)在乘法中具有受保護的訪問
關於我在做什么錯的想法?
public class Multiplication{
protected int mul(int a,int b){
return (a*b);
}
}
class ImplimentPkg extends Multiplication {
public static void main(String args[]){
Multiplication obj=new ImplimentPkg();
//Here's the error
System.out.println(obj.mul(2,4));
}
protected int mul(int a,int b){
System.out.println("");
return 0;
}
}
Java教程說:
protected修飾符指定成員只能在其自己的程序包中(與package-private一起)訪問,並且只能由其在另一個程序包中的類的子類訪問。
您可能認為您已經匹配了第二種情況(繼承)。
Multiplication obj = new ImplimentPkg();
System.out.println(obj.mul(2, 4));
這意味着您正在使用父類Multiplication的實例。 盡管代碼在乘法子類的方法內部。 這並不意味着實例obj與繼承有關 。 當然,mul(...)方法是不可見的。 您可以做的是:使用關鍵字super。
public void bar() {
Multiplication mul = new Multiplication();
mul.mul(1, 2); // <- error
super.mul(1, 2); // correct
Multiplication.foo(); // correct
}
注意:如果您在父類中保護了靜態方法,例如:
public class Multiplication {
private String name = "some";
protected int mul(int a, int b) {
return (a * b);
}
protected static void foo() {
System.out.println("foo");
}
}
在這里,可以在子類中的任何地方訪問foo()方法,但不能訪問其他類。 順便說一句,您不應該使用受保護的靜態方法,請參見此處的原因 。
您可能對另一個相關主題感興趣,請參見此處 。
在自己的Java文件中創建每個類
ImplimentPkg.java
package my;
class ImplimentPkg extends Multiplication {
public static void main(String args[]) {
Multiplication obj = new ImplimentPkg();
System.out.println(obj.mul(2, 4));
}
protected int mul(int a, int b) {
System.out.println("");
return 0;
}
}
乘法
package my;
public class Multiplication {
protected int mul(int a, int b) {
return (a * b);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.