iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >关于java中继承类的权限问题的详细介绍
  • 125
分享到

关于java中继承类的权限问题的详细介绍

java教程java继承类权限 2019-09-11 11:09:38 125人浏览 绘本
摘要

在Java中有一个比较容易忽略的问题,那就是继承类的权限与基类的权限之间的关系。因为平时在使用继承类的时候,可能很少会需要到修改基类的访问权限控制符,而是直接使用基类的访问权限控制符。如果基类有属性方法是private的,那么子类是否可以修

在Java中有一个比较容易忽略的问题,那就是继承类的权限与基类的权限之间的关系。因为平时在使用继承类的时候,可能很少会需要到修改基类的访问权限控制符,而是直接使用基类的访问权限控制符。

如果基类有属性方法是private的,那么子类是否可以修改为protected,如果是protected,那么子类是否可以修改为public或者private呢?接下来就看一下这个问题。

相关视频教程推荐:java教学视频

一、基类方法为private

首先,如果基类的属性方法是private的,那么子类能否修改为protected或者public呢?答案是否定的,这个答案稍加推理就能得出来,既然基类的属性方法是private的,那么他对于子类就不可见,既然子类都不可见,怎么还能修改基类方法的权限控制符呢。

我们可以用一段代码来验证这个问题:


public class BaseClass {
    private void test() {}
}
 

public class ExtendClass extends BaseClass {
    //@Override 
    protected void test() {}
}

上面的代码如果将注解去掉,那么就会报错,提示找不到方法,因为基类的方法的private的,如果去掉注解就没有问题,但此时子类的test()方法与基类的test()方法是两个完全没有关系的方法。

二、基类方法为friendly

如果基类方法为friendly,即为默认的权限,那么就分为两种情况,一种是子类与基类处于同一包内,一种是子类与基类不在同一包内。当子类与基类在同一包内的时候,是可以将权限控制符扩大为protected或者public的:


package demo1;
public class BaseClass {
    void test() {}
}
 

package demo1;
public class ExtendClass extends BaseClass {
    @Override 
    protected void test() {}
}

上述两个类都在包demo1下,代码能正确使用。但是当子类与基类不在同一包的时候,情况就不一样了:


package demo2.demo1;
public class BaseClass {
    void test() {}
}
 

package demo2;
public class ExtendClass extends BaseClass {
    //@Override 
    protected void test() {}
}

如果子类与基类不在同一包,那么就不能扩展默认权限,原因其实与private一样,子类不能看见基类的方法,因此也就不能扩展方法的权限控制符。

三、基类方法为protected

如果基类的方法为protected,那么子类就可以将访问控制符扩展为public:


package demo2.demo1;
public class BaseClass {
    protected void test() {}
}
 

package demo2;
public class ExtendClass extends BaseClass {
    @Override 
    public void test() {}
}

四、总结

其实想要弄清扩展的情况很容易,记住下面这个准则:理论上说子类是可以扩展基类的访问权限控制符,但是不能缩小基类的访问权限控制符,而且仅当子类能看见基类的方法的时候可以扩展。

学习更多相关教程可以访问:java零基础入门

--结束END--

本文标题: 关于java中继承类的权限问题的详细介绍

本文链接: https://www.lsjlt.com/news/4393.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作