错误: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教程说:
受保护的修饰符指定成员只能在其自己的包中访问(与包私有一样),此外,还可以由另一个包中其类的子类访问。
您可能认为您已经匹配了第二种情况(继承)。
Multiplication obj = new ImplimentPkg();
System.out.println(obj.mul(2, 4));
这意味着您正在使用父类乘法的实例。尽管代码位于乘法子类的方法中。这并不意味着实例 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 文件中创建每个类
暗示Pkg.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;
}
}
乘法.java
package my;
public class Multiplication {
protected int mul(int a, int b) {
return (a * b);
}
}