簡體   English   中英

繼承和受保護的類Java

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM