黑马程序员技术交流社区
标题:
关于继承里面private的问题?
[打印本页]
作者:
昝文萌
时间:
2013-9-5 19:44
标题:
关于继承里面private的问题?
class Fu
{
private String show()//此方法用private修饰
{
return "Fu";
}
public void print()
{
System.out.println(show());
}
}
class Zi extends Fu
{
public String show()//重新定义一个与父类一样的show方法
{
return "Zi";
}
}
class DemoExtends
{
public static void main(String[] args)
{
Zi zi = new Zi();
zi.print();//这里打印的是什么?
}
}
复制代码
打印结果是Fu,为什麽?为什麽print()没有调用Zi的方法!
作者:
gulup
时间:
2013-9-5 20:01
privae修饰符修饰的方法,不能被覆盖,所以你在Zi类中定义的那个show方法,是属于子类中的新方法。
print方法你没有重写,其调用的仍然是父类的show方法。
因为上面说了,Zi类中的show方法是Zi类扩展的,不属于重写,所以不会去调用Zi类中的show方法。
如果你需要print方法输出ZI,可以重写print方法的实现。:
class Fu
{
private String show()//此方法用private修饰
{
return "Fu";
}
public void print()
{
System.out.println(show());
}
}
class Zi extends Fu
{
public String show()//重新定义一个与父类一样的show方法
{
return "Zi";
}
public void print()
{
System.out.println(this.show());
}
}
class Test
{
public static void main(String[] args)
{
Zi zi = new Zi();
zi.print();//这里打印的是什么?
}
}
复制代码
作者:
itachi
时间:
2013-9-5 20:28
被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖
Zi.print()调用的任然是父类show()方法
作者:
焦允
时间:
2013-9-5 20:37
首先,一个类中private修饰的成员,只能在本类中使用,子类不能继承父类私有成员。
其次,在上面的代码中,子类中虽然没有直接定义print()方法,但是它却从父类中继承得到了,但是没有进行重写,所以子类的对象在调用时,只能去找父类中相应的方法。
作者:
花海1989
时间:
2013-9-5 21:31
打印结果就应该是fu,因为子当中没有print(),只能继承fu中的print()方法,然后再调用show()的方法,因为show()前面没有zi.show(),所以这次只能调用本类中的show()方法。所以打印结果为:fu
作者:
昝文萌
时间:
2013-9-6 09:08
恩,想明白了,谢谢大家!
作者:
胡志翔
时间:
2013-9-6 11:58
被private修饰的父类成员方法没法被子类覆写,只能在父类中调用。
作者:
......
时间:
2013-9-6 16:06
private 修饰的成员变量和方法都是私有的,不能被别的类访问到,也就不能被子类访问到,所以就不会被继承,因而也就不能被子类的方法覆盖。你所写的代码中子类只继承了父类的public void print()方法,没有继承父类的private String show()方法。public String show()只是被看做是你在子类中新定义的一个方法而已。
作者:
yanglfree
时间:
2013-9-6 20:25
private修饰的方法子类又没有复写,所以直接在父类调用print()
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2