2016-01-13 2 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

Является ли класс 'ImplimentPkg' в другом пакете от' Multiplication'? Если да, ошибка возникает из-за того, что '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

, если они находятся в разных пакетах, тогда вы не можете использовать защищенные по определению. Вместо этого вам придется использовать общественность. – 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)); 

Это означает, что вы используете экземпляр Умножения родительского класса. Хотя код находится внутри метода подкласса 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() могут быть доступны везде в подклассе, но не других классов. Кстати, вы не должны использовать защищенный статический метод, см. reasons here.

Возможно, вас интересует другая связанная с этим тема, см. here.

Смежные вопросы