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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 史小兵 中级黑马   /  2012-10-12 21:33  /  1576 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
写错地方了:
public void enjoy() {
    super.name="haha";
    System.out.println(super.name);
            
    }
回复 使用道具 举报
代码要写在方法体中

属性要有类型定义

你那个两个都不是
回复 使用道具 举报
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);
               
        }
}

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
我个人的看法是:java虚拟机在加载Cat类时发现Cat继承Animal抽象类(你的代码中Animal可以看做接口)会先加载Animal类后加载Cat类,此时在Animal类中有一个name变量  Cat类中也有一个变量name,Cat复写enjoy方法时,super.name="haha";代表访问父类中的变量name ;如果是this.name="haha"的话就代表访问的是Cat类中的变量name。
回复 使用道具 举报
在java中类成员变量只一次声明和赋值,多次赋值操作得在方法内进行
当Cat类继承类Animal后 Cat类也就继承了  name这个属性了  也就是说在Cat类中有super.name
其实简单来说就是 public int a = 2;a = 4;这样是不行的
对于为什么不能再main方法中使用:main是static类型的 而 name属性是非static类型
不知道这样解释  是否可以   

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马