黑马程序员技术交流社区

标题: 继承问题 [打印本页]

作者: 史小兵    时间: 2012-10-12 21:33
标题: 继承问题
public abstract class Animal {
        public String name;
        public abstract  void enjoy();
       

}
class Cat extends Animal{
       
       
//        super.name="haha";为什么在此处不能访问父类的name属性
        @Override
        public void enjoy() {
                System.out.println(super.name);
               
        }
       
}
作者: 张忠豹    时间: 2012-10-12 21:57
写错地方了:
public void enjoy() {
    super.name="haha";
    System.out.println(super.name);
            
    }

作者: 张 涛    时间: 2012-10-12 21:57
代码要写在方法体中

属性要有类型定义

你那个两个都不是
作者: 胡斌    时间: 2012-10-12 22:19
abstract class Animal {
        public String name;
        public abstract void enjoy();
   
}
public class Example extends Animal
{
        public static void main(String[] args)
        {
                ////为什么在此处不能访问父类的name属性
       // @Override
                new Example().enjoy();
      
      
        }
        public void enjoy()        
        {
                super.name="haha";
            System.out.println(super.name);
               
        }
}

作者: yangfengxiao    时间: 2012-10-12 22:22
我个人的看法是:java虚拟机在加载Cat类时发现Cat继承Animal抽象类(你的代码中Animal可以看做接口)会先加载Animal类后加载Cat类,此时在Animal类中有一个name变量  Cat类中也有一个变量name,Cat复写enjoy方法时,super.name="haha";代表访问父类中的变量name ;如果是this.name="haha"的话就代表访问的是Cat类中的变量name。

作者: 曾浩    时间: 2012-10-14 12:51
在java中类成员变量只一次声明和赋值,多次赋值操作得在方法内进行
当Cat类继承类Animal后 Cat类也就继承了  name这个属性了  也就是说在Cat类中有super.name
其实简单来说就是 public int a = 2;a = 4;这样是不行的
对于为什么不能再main方法中使用:main是static类型的 而 name属性是非static类型
不知道这样解释  是否可以   






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