错误: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;
}
}
答案 0 :(得分:2)
protected修饰符指定只能在自己的包中访问该成员(与package-private一样),此外,还可以在另一个包中通过其类的子类访问。
您可能认为您已匹配第二种情况(继承)。
Multiplication obj = new ImplimentPkg();
System.out.println(obj.mul(2, 4));
这意味着您正在使用父类乘法的实例。虽然代码在Multiplication的子类方法中。这并不意味着实例obj与继承有关。当然,mul(...)方法是不可见的。您可以做的是:使用关键字超级
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()方法可以在子类中的任何地方访问,但不能访问其他类。顺便说一下,您不应该使用受保护的静态方法,请参阅reasons here。
您可能会对另一个相关主题感兴趣,请参阅here。
答案 1 :(得分:-1)
在自己的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;
}
}
Multiplication.java
package my;
public class Multiplication {
protected int mul(int a, int b) {
return (a * b);
}
}