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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 U芽Lady 于 2013-4-14 19:57 编辑

class Demo{
  int show(int a,int b){return 0;}
}
class Demo1 extends Demo{
public long show(int a,int b){return 0;}
}
//为什么子类的方法不能这样写,子类继承父类的方法和属性的时候不是只和权限有关吗,子类的public权限大于父类的默认权限,为什么报错
//报错是:Demo1中的show(int,int)无法覆盖Demo中的show(int,int)

4 个回复

倒序浏览
子类继承父类时 ,   子类与父类有同名的函数时子类会覆盖父类的   覆盖的条件是 :函数名 ,参数类型和个数 ,返回值类型必须一样, 权限不能低于父类的权限 ,子类方法不能抛出比父类更多的异常 .     满足这些条件就OK啦!
回复 使用道具 举报
如果子类继承的函数等如果权限可以大于父类,那不把父类暴露出去了,所以语法不允许这样做,防止别的程序通过这种间接的方法访问了本不允许访问的变量等。
回复 使用道具 举报
不完全同意楼上的观点

class Demo{
           int show(int a,int b){return 0;}
        }
class Demo1 extends Demo{
        double show(int a,int b)
        {return 0;}
        }

这个就不报错了吗?

不是这样的。
你没有明白重载的意思

什么叫重载
就是当函数名相同而函数参数个数或者参数类型不同的时候才叫重载


你的子类继承了父类,相当于在子类中定义了一个
   int show(int a,int b){return 0;}

还能再子类中定义double show(int a,int b)???

这不叫重载。。

只有满足了重载。你才能正确

但是当你覆盖的时候,正如一楼所说
覆盖的条件是 :函数名 ,参数类型和个数 ,返回值类型必须一样,

这才叫覆盖,你那根本 就不是覆盖。

当覆盖之后,权限不能低于父类的权限 ,子类方法不能抛出比父类更多的异常 .
class Demo{
        public int show(int a,int b){return 0;}
        }
class Demo1 extends Demo
{
        private int show(int a,int b)
        {return 0;
        }

为错误
回复 使用道具 举报
重载时,方法必须完全一样,包括返回值和参数.如果按上面的写法,子类中将出现两同名的show()方法,它们的返回值类型不同,这是不允许的.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马