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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© abathe 中级黑马   /  2014-12-20 00:06  /  1312 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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();
        }
}

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

14 个回复

倒序浏览
子类不能继承父类的私有方法;private后就相当与你子类里没有这个方法了,就相当与普通写了一个方法而已。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
楼上正解
回复 使用道具 举报
父类的方法私有化后,子类就继承不了,子类没有你就相当于自定义了一个新的函数
回复 使用道具 举报
当Fu类中的speak函数未加”private“修饰时,子类会继承父类的speak方法,此时子类的speak()要么重载,要么重写父类方法。 这两个条件都不满足时,程序运行会报错。
回复 使用道具 举报
caobin 发表于 2014-12-20 00:18
子类不能继承父类的私有方法;private后就相当与你子类里没有这个方法了,就相当与普通写了一个方法而已。 ...

soga,多谢解释
回复 使用道具 举报
1楼正解
回复 使用道具 举报
private是私有的意思,被修饰的方法是不能被子类调用的。所以你在子类写的函数speak与父类中的函数speak不会产生调用的冲突。
回复 使用道具 举报
duluhua 中级黑马 2014-12-22 10:51:42
9#
1.private的成员变量和方法不能被子类继承,因为private的成员变量和方法仅能在该类内部访问,类外(包括子类)是访问不到的。
2.如果父类中有private的speak() ,那么子类是不继承的,所以再子类中再写speak() 是正确的,与父类的speak() 不冲突。
3.如果父类中的speak() 不是private的,那么子类就能继承speak() 方法,所以如果你再在子类中写speak() 方法时就要注意了,因为子类中已经有一个speak() 了,这里就要注意方法的重载的条件了,参数的类型或个数不同,与返回值无关,不能存在参数类型或个数相同仅仅返回值不同的方法。
回复 使用道具 举报
楼上正解
回复 使用道具 举报
继承时可以认为是继承了父类的所有,但是由于访问权限,父类的方法私有后只有父类本类可以访问。
回复 使用道具 举报
红楼 中级黑马 2014-12-22 21:41:41
12#
子类不能重写父类中的私有方法,
回复 使用道具 举报
9楼写的很详细
回复 使用道具 举报
子类是无法继承父类中的私有方法的。
回复 使用道具 举报
大家说的很详细了,我也没什么可以补充的了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马