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.
Что значит «Вот ошибка»? – Sifeng
System.out.println (obj.mul (2,4)) не может получить доступ к собственному методу, который переопределен ..! –
Является ли класс 'ImplimentPkg' в другом пакете от' Multiplication'? Если да, ошибка возникает из-за того, что 'mul' защищен, и вы не можете получить к нему доступ из другого пакета. – Sweeper