对 Java 中派生类方法的更严格的访问
原文:https://www . geeksforgeeks . org/更严格的访问是给 java 中的派生类方法的/
因为私有、受保护和公共(访问修饰符)影响字段的可访问性和范围。因此,从类外部调用的方法不能是私有的。
在程序 1 中:我们为派生类创建对象并调用 foo 函数,但是这个 foo 函数是私有的,也就是说,它的作用域只在派生类中,当我们想通过 Main 类访问时,派生类会给出错误。
在程序 2 中:我们为派生类创建对象并调用 foo 函数,这个 foo 函数是公共的,所以这不会产生错误,因为我们可以从包中的任何地方访问它。
在程序 3 中:这里我们为基类创建对象,然后调用 foo 函数,现在派生类和基类中的 foo 函数都必须是公共的或受保护的(决不是私有的),因为私有方法只在该范围内具有可访问性。
注意:被调用的函数永远不会是私有的,因为它的作用域只在花括号({})中。如果被调用的函数在基类中并且被派生类重写,那么派生类中被重写的方法也是公共的或受保护的。
程序 1
Java
// file name: Main.java
class Base {
public void foo() { System.out.println("Base"); }
}
class Derived extends Base {
// compiler error
private void foo() { System.out.println("Derived"); }
}
public class Main {
public static void main(String args[])
{
Derived d = new Derived();
d.foo();
}
}
输出:
prog.java:10: error: foo() in Derived cannot override foo() in Base
private void foo() { System.out.println("Derived"); }
^
attempting to assign weaker access privileges; was public
prog.java:16: error: foo() has private access in Derived
d.foo();
^
2 errors
程序二
T5】JavaT0T10输出T1
程序 3
Java
// file name: Main.java
class Base {
public void foo() { System.out.println("Base"); }
}
class Derived extends Base {
// if foo is private in derived class then it will
// generate an error
public void foo() { System.out.println("Derived"); }
}
public class Main {
public static void main(String args[])
{
Base d = new Base();
d.foo();
}
}
输出
Base
本文由 Khushi Agarwal 供稿。如果你喜欢极客博客并想投稿,你也可以用 contribute.geeksforgeeks.org 写一篇文章或者把你的文章邮寄到 contribute@geeksforgeeks.org。看到你的文章出现在极客博客主页上,帮助其他极客。
如果你发现任何不正确的地方,或者你想分享更多关于上面讨论的话题的信息,请写评论。
版权属于:月萌API www.moonapi.com,转载请注明出处