如何理解“子类不能降低父类中定义的方法的可访问性”这句话?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何理解“子类不能降低父类中定义的方法的可访问性”这句话?相关的知识,希望对你有一定的参考价值。

如果一个方法在父类定义为public,在子类中必须也定义为public。
如果一个方法在父类定义为public,“在子类中定义为protected”是如何降低父类中定义的方法的可访问性从而不被允许的?麻烦举个例子。谢谢!

首先你需要理解先Java中的访问控制修饰符,public,protected,private,friendly(Java中没有修饰符的情况下为friendly)。
public,private,protected以及暗示性的friendly。若未明确指定其他关键字,则默认为后者。这些关键字的使用和含义都是相当直观的,它们决定了谁能使用后续的定义内容。“public”(公共)意味着后续的定义任何人均可使用。而在另一方面,“private”(私有)意味着除您自己、类型的创建者以及那个类型的内部函数成员,其他任何人都不能访问后续的定义信息。private在您与客户程序员之间竖起了一堵墙。若有人试图访问私有成员,就会得到一个编译期错误。“friendly”(友好的)涉及“包装”或“封装”(Package)的概念——即Java用来构建库的方法。若某样东西是“友好的”,意味着它只能在这个包装的范围内使用(所以这一访问级别有时也叫作“包装访问”)。“protected”(受保护的)与“private”相似,只是一个继承的类可访问受保护的成员,但不能访问私有成员。
参考技术A 父类:FatherClass
public void speak
//xxx

子类:SonClass
private void speak
//xxx

调用:
FatherClass fc = new SonClass();
fc.speak();
由于多态性,fc.speak()实际上调用的是子类的方法,父类不能访问子类方法,肯定会报错
=======可能理解有误追问

可不可以这样理解?在FatherClass和SonClass存在继承关系的情况下,SonClass的speak()覆盖了父类的方法,而在SonClass的speak()访问修饰符为private的情况之下,SonClass的子类便继承不了speak(),那么在继承链上从SonClass的子类开始一直往下的类都无法继承speak(),这和继承规则有矛盾,所以,这样不被允许。
可对?有劳指教……

追答

嗯,可以

本回答被提问者采纳
参考技术B 这主要是子类中覆盖父类的方法时,应注意的问题。如父类有一个说话的方法public void speak(){System.out.println(“aaa”);},继承他的子类中想重写该方法,则定义public void speak()System.out.println(“bbb”);,这时,该方法不能声明为private或protected或默认的。追问

假如父类方法为public,子类为private或protected的话,子类方法是如何导致降低父类中定义的方法的可访问性的?可否举个例子?(假设子类方法可以降低父类方法的可访问性)

如何理解 Service Mesh

如何理解 Service Mesh


1、Service Mesh

Service Mesh :服务网格

2、如何理解 Service Mesh

Service Mesh 是一个概念,第二代 Service Mesh 以 Istio 为代表
Service Mesh 是一个组合,每一个微服务都有自己的 SideCar ,他与微服务共存亡

1、微服务框架本身屏蔽了分布式系统通信的一些通用功能实现细节ÿ

以上是关于如何理解“子类不能降低父类中定义的方法的可访问性”这句话?的主要内容,如果未能解决你的问题,请参考以下文章

如何理解 Service Mesh

如何理解FFT

如何理解工作,如何理解事业

如何理解Spring Boot中的Starter?

如何理解 CGI,WSGI

集群与分布式 如何理解(自己的理解)