继承和受保护的类 Java

  • 本文关键字:Java 受保护 继承 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教程说:

受保护的修饰符指定成员只能在其自己的包中访问(与包私有一样),此外,还可以由另一个包中其类的子类访问。

您可能认为您已经匹配了第二种情况(继承)。

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);
    }
}

最新更新