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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 起个好名字 中级黑马   /  2015-3-4 18:19  /  827 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Animal {
  void Eat(){};
  void Sleep(){System.out.println("睡觉一样!");}
}
class Rabbit extends Animal{
void Eat(){
System.out.println("Rabbit是吃草的!!");
}
super.Sleep();
/*void Sleep(){
//System.out.println("睡觉一样!");
}*/
}
class Tiger extends Animal{
void Eat(){
System.out.println("Tiger是吃肉的!!");
}
super.Sleep();
/*void Sleep(){
//System.out.println("睡觉一样!");
}*/
}
class AnimalTest{
public void Test(){
Animal a=new Rabbit();
a.Eat();a.Sleep();
Animal b=new Tiger();
b.Eat();b.Sleep();
}
}
public class LianXi32{
public static void main(String[] args){
AnimalTest r=new AnimalTest();
r.Test();
}
}

怎么调用不了父类中的Sleep方法啊???

评分

参与人数 3黑马币 +54 收起 理由
积分地方vjadiof + 20 赞一个!
好你把个子 + 9 赞一个!
朱斌 + 25 很给力!

查看全部评分

3 个回复

倒序浏览
类中只能有方法和属性,不能出现语句,方法中才能出现语句(静态块除外)
回复 使用道具 举报 1 0
本帖最后由 z47057554 于 2015-3-4 20:41 编辑

见下面





    1. <p><p>class Animal {
    2.         void Eat(){};
    3.         void Sleep(){
    4.                 System.out.println("父类Animal睡觉一样!");}
    5. }

    6.         class Rabbit extends Animal{
    7.                 void Eat(){
    8.                         System.out.println("Rabbit是吃草的!!");
    9.                 }
    10.                 void FatherSleep(){
    11.                         super.Sleep();//单独写这句是在调用父类方法,调用只能出现函数中,类中是不以用的
    12.                                                   //类中只能定义成员变量和方法
    13.                 }
    14.                 void Sleep(){
    15.                         System.out.println("子类Rabbit睡觉一样!");//如果你想让子类执行父类方法,
    16.                                      //那么子类中不要覆盖这个方法,此处已覆盖
    17.                                      //不想覆盖,想使用父类的,需把这个方法全部删除
    18.                                     //如下面Tiger类
    19.                 }                        
    20.         }
    21.         class Tiger extends Animal{
    22.                 void Eat(){
    23.                         System.out.println("Tiger是吃肉的!!");
    24.                 }
    25.                 void FatherSleep(){
    26.                         super.Sleep();
    27.                 }
    28.                
    29.         }
    30.         class AnimalTest{
    31.                 public void Test(){
    32.                         Animal a=new Rabbit();//这是多态,指向哪个子类,如果父类方法已被覆盖就调用哪个子类方法,没被被覆盖就调用父类方法
    33.                         a.Eat();
    34.                         a.Sleep();
    35.                         
    36.                         //a.FatherSleep();,多态的时候只能调用父类中已有的方法,若该方法被子类覆盖,那只能调用覆盖后的方法
    37.                         //想调用子类特有方法,需要向下转型
    38.                         Rabbit newA=(Rabbit) a;
    39.                         newA.FatherSleep();
    40.                         
    41.                         System.out.println();//输出结果空行格开
    42.                         Animal b=new Tiger();
    43.                         b.Eat();
    44.                         b.Sleep();
    45.                 }
    46.         }</p></p>
    复制代码

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 很给力!

查看全部评分

回复 使用道具 举报 2 0
super只能出现在函数中,不能直接在类中写。还有你确定你不是在刷黑币?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马