标题: 关于继承,为什么不能在父类变量前加私有 [打印本页] 作者: 选择黑马 时间: 2012-6-21 23:35 标题: 关于继承,为什么不能在父类变量前加私有 class Fu
{
private int num = 7;
}
class Zi extends Fu
{
int num = 9;
void show()
{
System.out.println(super.num);
}
}
class Extends2
{
public static void main(String[] args)
{
Zi z = new Zi();
z.show();
}
}
所报提示,num可以再Fu中访问private私有。为什么在show方法打印语句中加入super不可以,加入this就可以,谢谢!作者: 吴小东 时间: 2012-6-21 23:45
首先一点,你要知道父类是怎么产生出来的,父类是又子类提取共性的一些属性和方法产生的,如果父类里面还有私有的东西的话,已经不符合该类的原则问题了。
你可以定义私有的属性,但是必须要对外提供公共的方法区访问。作者: 鲍永章 时间: 2012-6-21 23:47
private的只有在类内部才能访问,类内部不是类的对象,所以super也无法访问,private的根本就没有继承下来作者: 钟成军 时间: 2012-6-21 23:48
num在父类中被private修饰,所以子类不能继承。
子类中的num并没有重写父类的num,因为它根本就没有继承父类的num,所以当调用super.num时会报错:num可以在Fu中访问private.
而用this调用是调用子类的num,即输出值为9,如果不用this.num,同样也为9,即加不加this,结果都一样!作者: 张立江 时间: 2012-6-21 23:48 本帖最后由 小张童鞋 于 2012-6-21 23:50 编辑
父类中可以定义一些私有的变量,但是这些私有变量是无法被他们的子类所继承的,所以你刚才用super.num是访问不到的,private修饰的变量作用域只能在本类中使用。你通过this.num调用到的只是子类中的num如果你想要访问父类中的私有变量的话,不防给它们提供一个出口,就是类似于setter(),getter()这些方法,下边我给你举个例子。
class Fu{
private int num;
public void setNum(int num){
this.num=num;
}
public int getNum(){
return this.num;
}
}
class ExtendDemo extends Fu{
public void show(){
System.out.println(super.getNum());//这样就可以访问到父类中的num了
}
}
public class Test(){
public static void main(String args[]){
ExtendDemo demo=new ExtendDemo ();
demo.show();
}
}