日期:2014-05-20  浏览次数:20744 次

初级菜鸟问个问题
是我们教材上的一个试验题目,题目如下,希望高手些给写下,如果可以能给我写点有助于理解的注释就更好了,谢谢!

[1],创建接口Eatable.
public interface Eatable{
  public void howToEat();
}
[2],创建下列两组类,每种可以吃的对象必须要能够实现Eatable接口.
 创建Anmimal类及其子类Tiger,Chicken和Elephant,其中Chicken类必须实现Eatable接口.
 创建Fruit类及其子类Apple和Orange,因为水果可以吃,所以类Fruit要实现Eatable接口.在Fruit类中,给出了howToEat方法的通用实现,在Apple类和Orange类中,给出howToEat方法的特殊实现.
[3]在每个类中重写toString方法,以返回类名.(这个我没有理解,重点就是这个.谢谢)
[4]创建测试程序,包含main方法和showObject方法.在main方法声明和创建Object类型的四个实例,分别为老虎,小鸡,苹果和桔子.然后调用showObject方法小时对象.(这里我的输出就不对了,看不明白是什么东西--'task.Orange@1b67f74',麻烦解释下,再次表示感谢!)下面是给出的showObject方法.

public static void showObject(Object ob){
  System.out.println(ob);
  if(ob instanceof Eatable){
  ((Eatable)ob).howToEat();
  }
}

那个知道的朋友给我个比较完善的答案好吗?谢谢,对接口的理解我还不是很深入,希望能给我点帮助.





------解决方案--------------------
public class Anmimal {
// 每种动物都有它特定的属性,比如说,它是什么动物
String name = "anmimal";

// 每种动物都有他独特的行为,都会进食
public void Eat(){
}
}

class Tiger extends Anmimal {
// 老虎
String name = "Tiger";

// 老虎的进食,可能是要吃肉
public void Eat() {
System.out.println("吃肉.");
}
}

class Checken extends Anmimal implements Eatable{
String name= "Checken";

public void Eat() {
System.out.println("吃虫子.");
}

// 这里你继承了Eatable接口,就必须实现他howToEat()的方法,可以继承多个接口
public void howToEat() {
System.out.println("当然是用嘴吃!");
}
}

class Elephant extends Anmimal {
String name = "Elephant";

public void Eat() {
System.out.println("吃水果.");
}
}
------解决方案--------------------
解释一下这个方法的意思吧!

public static void showObject(Object ob){ 
System.out.println(ob); // 输出类名
if(ob instanceof Eatable){ // 如果ob这个对象继承自Eatable,强制将ob由Object类型转换为Eatable类型,并调用它的howToEat()方法
((Eatable)ob).howToEat(); 


它是一个静态方法,可以通过类名直接调用。
你传入的是Orange对象,输出的"task.Orange@1b67f74 ",task是Orange类所在的包名,而@1b67f74应该是内存地址。
------解决方案--------------------
学习...