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)作者: 沈浩 时间: 2013-4-14 18:15
子类继承父类时 , 子类与父类有同名的函数时子类会覆盖父类的 覆盖的条件是 :函数名 ,参数类型和个数 ,返回值类型必须一样, 权限不能低于父类的权限 ,子类方法不能抛出比父类更多的异常 . 满足这些条件就OK啦!作者: 何红卫 时间: 2013-4-14 18:47
如果子类继承的函数等如果权限可以大于父类,那不把父类暴露出去了,所以语法不允许这样做,防止别的程序通过这种间接的方法访问了本不允许访问的变量等。作者: 王大斌 时间: 2013-4-14 19:28
不完全同意楼上的观点
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;
}