黑马程序员技术交流社区
标题:
方法的重写
[打印本页]
作者:
王光保
时间:
2011-7-17 19:36
标题:
方法的重写
大家都知道方法的重写!如果在重写是改变了方法的访问权限,比如父类private->子类defalut这时候还是是方法的重写吗?
[
本帖最后由 wangguangbao 于 2011-07-17 20:28 编辑
]
作者:
匿名
时间:
2011-7-17 20:03
标题:
回复 楼主 的帖子
不知道你这个private->defalut是改变的父类还是子类,不过anyway
父类的方法要想被重写,就不能是private,因为子类是不能继承父类的私有成员的,不能继承谈何重写
子类重写父类方法时,访问权限也不能比父类更弱。
也就是说父类的方法想被继承就不能时private的
比如父类方法是protected,子类重写的时候可以是protected,也可以是public,无论是protected还是public的,只要方法名一样,是继承关系,则就是方法的重写
作者:
匿名
时间:
2011-7-17 22:05
重写方法不能使用比被重写方法更严格的访问权限。
作者:
匿名
时间:
2011-7-18 00:57
子类不能降低父类方法的访问权限,只能大于等于父类中多态方法的访问权限,这是一个规定。
作者:
匿名
时间:
2011-7-18 09:31
在张老师就业宝典中有这样的总结:重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的[color=Red]多态性[/color]的一种表现。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。子类方法的访问权限只能比父类的更大,不能更小。如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。
作者:
匿名
时间:
2011-7-18 09:38
只有在参数改变的时候才构成重写。当然如果父类是private或者final的时候,就算参数一样也是重写...
但愿没有记错
作者:
匿名
时间:
2011-7-18 10:36
父类如果是private的话,子类是可以继承的,但是“只能看不能用”,父类的访问权限必须高于子类,子类才能调用父类的方法。
作者:
匿名
时间:
2011-7-18 10:41
[color=Red]如果一个方法在父类中试被private修饰的,这个方法就是对其子类隐藏的,既然子类都得不到这个方法那么如何谈重写?[/color]
如果你在子类中定义一个于父类方法名相同的,那么着不是重写,只是在子类中重写定义一个新的方法
:@
作者:
匿名
时间:
2011-7-18 18:18
当然是了,首先应理解什么是方法的重写,方法重写遵循的的条件,要知道如果父类方法具有的是private访问权限,该方法对其子类是隐藏的,子类无法访问该方法,也就无法重写。而defalut访问权限则可以被其子类访问,就可以实现方法的重写。
作者:
匿名
时间:
2011-7-18 19:58
大家继续讨论,为什么子类覆写父类方法时,访问权限不能比父类更严格?????
作者:
匿名
时间:
2011-7-18 22:18
标题:
回复 10 # 的帖子
[code]while(true)
{
Socket s = ss.accept();
new Thread(new Servicer(s)).start();
}
ss.close();[/code]记得张老师 写过一段这样的一段代码时候 程序可能会报错,因为可能进入死循环,而不能执行下面代码。
如果这样写[code]boolean bRunning = true;
while(bRunning)
{
Socket s = ss.accept();
new Thread(new Servicer(s)).start();
}
ss.close();[/code]程序就不会认为是死循环了。
懂点了吗?
为什么子类覆写父类方法时,访问权限不能比父类更严格?????
Java是建立在建立在反射基础上的
只有程序运行到某句代码时,才能知道这句代码是否可行。
如果不限制子类的访问权限,方法的重写将毫无意义。
我给你举个例子
一个水杯 ,有一个茶杯,水杯的水可以倒入茶杯。茶杯继承水杯的属性和方法,添加了新方法可以泡茶水了。
如果这时改变了茶杯的访问权限,变为私有了。
水杯不能往茶杯倒水了。
会不会出错。 怎么泡茶水。。。
所以说 重写方法不能使用比被重写方法更严格的访问权限。
这就是一个规则,就是一个规定!!!!!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2