黑马程序员技术交流社区

标题: 关于重写的疑问(红色部分) [打印本页]

作者: abathe    时间: 2014-12-20 00:06
标题: 关于重写的疑问(红色部分)
class Fu
{
        ”private“  void speak()  
        {
                System.out.println("VB");
        }
}
class Zi extends Fu
{
        int speak()     //{:3_46:}当Fu类中的speak函数未加”private“修饰,程序运行会报错:返回类型int与void不兼容 ,无法覆盖
                                  可是如果加上”private“关键字后,程序运行不会报错,请教这是何原因                    
        {
                System.out.println("JAVA");
                return 6;
        }
}
class ExtendsDemo3
{
        public static void main(String[] args)
        {
                Zi z=new Zi();
                z.speak();
        }
}


作者: caobin    时间: 2014-12-20 00:18
子类不能继承父类的私有方法;private后就相当与你子类里没有这个方法了,就相当与普通写了一个方法而已。
作者: 找寻小龙猫    时间: 2014-12-20 00:35
楼上正解
作者: 青衫禅客    时间: 2014-12-20 00:35
父类的方法私有化后,子类就继承不了,子类没有你就相当于自定义了一个新的函数
作者: quick3g    时间: 2014-12-20 01:07
当Fu类中的speak函数未加”private“修饰时,子类会继承父类的speak方法,此时子类的speak()要么重载,要么重写父类方法。 这两个条件都不满足时,程序运行会报错。
作者: abathe    时间: 2014-12-21 19:57
caobin 发表于 2014-12-20 00:18
子类不能继承父类的私有方法;private后就相当与你子类里没有这个方法了,就相当与普通写了一个方法而已。 ...

soga,多谢解释
作者: 叫我王大锤    时间: 2014-12-21 20:53
1楼正解
作者: Honelyboy    时间: 2014-12-21 23:43
private是私有的意思,被修饰的方法是不能被子类调用的。所以你在子类写的函数speak与父类中的函数speak不会产生调用的冲突。
作者: duluhua    时间: 2014-12-22 10:51
1.private的成员变量和方法不能被子类继承,因为private的成员变量和方法仅能在该类内部访问,类外(包括子类)是访问不到的。
2.如果父类中有private的speak() ,那么子类是不继承的,所以再子类中再写speak() 是正确的,与父类的speak() 不冲突。
3.如果父类中的speak() 不是private的,那么子类就能继承speak() 方法,所以如果你再在子类中写speak() 方法时就要注意了,因为子类中已经有一个speak() 了,这里就要注意方法的重载的条件了,参数的类型或个数不同,与返回值无关,不能存在参数类型或个数相同仅仅返回值不同的方法。
作者: 南柯一梦境    时间: 2014-12-22 12:14
楼上正解
作者: 逆世界ylm    时间: 2014-12-22 20:38
继承时可以认为是继承了父类的所有,但是由于访问权限,父类的方法私有后只有父类本类可以访问。
作者: 红楼    时间: 2014-12-22 21:41
子类不能重写父类中的私有方法,
作者: reyzarc    时间: 2014-12-22 22:57
9楼写的很详细
作者: c91764000    时间: 2014-12-23 00:22
子类是无法继承父类中的私有方法的。
作者: 赖永树    时间: 2014-12-23 12:42
大家说的很详细了,我也没什么可以补充的了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2