黑马程序员技术交流社区
标题:
找找哪里有问题
[打印本页]
作者:
起个好名字
时间:
2015-3-4 18:19
标题:
找找哪里有问题
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方法啊???
作者:
ko889910
时间:
2015-3-4 20:20
类中只能有方法和属性,不能出现语句,方法中才能出现语句(静态块除外)
作者:
z47057554
时间:
2015-3-4 20:31
本帖最后由 z47057554 于 2015-3-4 20:41 编辑
见下面
<p><p>class Animal {
void Eat(){};
void Sleep(){
System.out.println("父类Animal睡觉一样!");}
}
class Rabbit extends Animal{
void Eat(){
System.out.println("Rabbit是吃草的!!");
}
void FatherSleep(){
super.Sleep();//单独写这句是在调用父类方法,调用只能出现函数中,类中是不以用的
//类中只能定义成员变量和方法
}
void Sleep(){
System.out.println("子类Rabbit睡觉一样!");//如果你想让子类执行父类方法,
//那么子类中不要覆盖这个方法,此处已覆盖
//不想覆盖,想使用父类的,需把这个方法全部删除
//如下面Tiger类
}
}
class Tiger extends Animal{
void Eat(){
System.out.println("Tiger是吃肉的!!");
}
void FatherSleep(){
super.Sleep();
}
}
class AnimalTest{
public void Test(){
Animal a=new Rabbit();//这是多态,指向哪个子类,如果父类方法已被覆盖就调用哪个子类方法,没被被覆盖就调用父类方法
a.Eat();
a.Sleep();
//a.FatherSleep();,多态的时候只能调用父类中已有的方法,若该方法被子类覆盖,那只能调用覆盖后的方法
//想调用子类特有方法,需要向下转型
Rabbit newA=(Rabbit) a;
newA.FatherSleep();
System.out.println();//输出结果空行格开
Animal b=new Tiger();
b.Eat();
b.Sleep();
}
}</p></p>
复制代码
作者:
yjsf216
时间:
2015-3-5 14:11
super只能出现在函数中,不能直接在类中写。还有你确定你不是在刷黑币?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2