黑马程序员技术交流社区

标题: 父类和子类声明了相同的变量, [打印本页]

作者: 不抛弃不放弃    时间: 2013-11-13 12:39
标题: 父类和子类声明了相同的变量,
本帖最后由 不抛弃不放弃 于 2013-11-14 01:30 编辑

public  class  Father{
   int i=20;

}
public class Son extends Father{
   public static void main(String args[]){
   int i=10;
    Son s= new Son();
System.out.println(s.i);  //结果是什么     为什么

  }

}

作者: 黄炳期    时间: 2013-11-13 13:13
你这样写会报错。因为s.i调用的是Son子类的成员变量i,可是你没有成员变量,只有在main函数中的局部变量。
局部变量可以直接输出:System.out.println(i);
如果你创建了子类的成员变量,如
public class Son extends Father{
    int i = 20;
    public static void main(String args[]){
    int i=10;
     Son s= new Son();
System.out.println(s.i);   //输出结果就是20.

作者: 寻找资拥。    时间: 2013-11-13 13:22
首先,如楼上所说的,你子类里面没有定义成员变量。
如果你要在main方法里使用到父类的i的话,可以用父类引用指向子类对象的方法去调用父类的变量i.
Father f=new Son();
System.out.println(f.i);

但是这样的话,父类的引用就只可以调用子类重写的方法。



作者: 彭刚    时间: 2013-11-13 13:32
这个是有两个公共类的问题吗
作者: 彭刚    时间: 2013-11-13 13:32
这个是有两个公共类的问题吗
作者: 付凯鹏    时间: 2013-11-14 00:30
在继承中,可以重写方法不能重写变量,如果子类和父类定义相同类型的变量,就会报错。
作者: 马富林    时间: 2013-11-14 01:28
楼主自己写的代码可能没法完全表达自己的意思,我这里自己修改一下应该够更好解释。看下面的代码,三个类中都有num属性。
  1. class Fu
  2. {
  3.         int num=10;
  4. }
  5. class Zi extends Fu
  6. {
  7.         int num=5;
  8. }
  9. class Demo extends Fu
  10. {
  11.         int num=55;
  12.         public static void main(String[] args)
  13.         {
  14.                 Zi x=new Zi();                          //子类引用
  15.                 System.out.println(x.num);                       //结果是5
  16.                 Fu y=new Zi();                         //父类引用
  17.                 System.out.println(y.num);                     //结果是10
  18.                 Demo c=new Demo();            //子类引用
  19.                 System.out.println(c.num);                      //结果是55
  20.                 Fu d=new Demo();                //父类引用
  21.                 System.out.println(d.num);                     //结果是10
  22.         }
  23.        

  24. }
复制代码
运行的结果是
5
10
55
10
很明显可以看出结果只和所引用的类有关。当对象引用父类时,对象num属性值为父类的,当对象引用子类时,对象num属性值为子类的。




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