2016-01-13 93 views
0

錯誤:mul(int,int)在乘法中保護訪問繼承和受保護類java

關於我在做什麼錯的想法?

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

你是什麼意思到「這是錯誤」? – Sifeng

+0

System.out.println(obj.mul(2,4))無法訪問自己的方法..這是重寫..! –

+0

與'Multiplication'不同的軟件包中的ImplimentPkg類是不是?如果是,則會發生錯誤,因爲'mul'受到保護,您無法從其他軟件包訪問它。 – Sweeper

回答

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

我正在做這個不同的包。 我想這樣.whare是問題請幫忙? –

+1

如果它們位於不同的包中,則不能使用受保護的定義。你將不得不使用public。 – Leo

+0

@Leo這不是Pushpak所要求的答案。 – Sifeng

2

Java tutorial說:

The protected modifier specifies that the member can only be accessed within its own package (as with package-private) and, in addition, by a subclass of its class in another package.

您可能認爲您已匹配第二個案例(繼承)。

Multiplication obj = new ImplimentPkg(); 
System.out.println(obj.mul(2, 4)); 

這意味着您正在使用父類乘法的實例。儘管代碼位於乘法子類的一個方法中。這並不意味着實例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()方法可以在子類中隨處訪問,而不是其他類。順便說一下,您不應該使用受保護的靜態方法,請參閱​​。

另一個相關主題可能會對您感興趣,請參閱here