A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 文涛 于 2013-11-3 15:02 编辑

有父类如下
class Demo
{
    int show(int a,int b)
    {
        return 0;
    }

}
为什么该父类的子类中不能有方法
private int show(int a,int b){return 0;}
static int show(int a,int b){return 0;}
为什么这两个方法不能有呢,我有点困惑

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

4 个回复

正序浏览
本帖最后由 高亮亮 于 2013-11-3 11:59 编辑

这个关于到访问权限修饰符。之前有位哥们问过,我自己搞得都不是太清楚。现在明白一点。

修饰符            同一个类           同一个包              子类(不同的包)         全局范围
public                可见                  可见                         可见                            可见
protected          可见                  可见                         可见                           不可见
无(默认)       可见                   可见                        不可见                       不可见
private              可见                  不可见                      不可见                        不可见

这样应该就清楚了,因为你子类要访问的了父类才能重写,父类不能是private,或者你就继承了但不访问可以。而子类里面,你如果私有的话,你继承下来重写后就不能被外界访问了,那你继承干嘛,没意义了啊?
而static就是,静态函数就是应该理解为你子类里不用继承或者重写就已经加载进内存了……这怎么破?矛盾了。

点评

还是有点凌乱~  发表于 2013-11-3 12:31
回复 使用道具 举报
如果你要在子类中写上这两个show方法或者随便一个(因为权限没有父类中的权限大,不会是重写父类中的show方法,它只能做为子类中特有方法),
然后子类在继承父类中show方法,这时,子类中就有两个名称为show的方法,当在子类在调用show方法时,jvm不能分辨到底调用的是哪个show方法,所以不可以这样写的。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
私有方法对子类是不可见的,不能被重写!
重写静态方法没有多态作用,所以静态方法也不能被重写
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马