继承与接口综合应用:ShowObject.java
(1)创建接口Eatable:
interface Eatable
{
public void howToEat();
}
(2)创建Animal类及其子类Tiger和Chicken,其中Chicken是可吃的,需实现Eatable接口;
(3)创建Fruit类及其子类Apple和Orange,因为水果可吃,所以Fruit类需实现Eatable接口;在Fruit类中,给出howToEat方法的通用实现,在Apple和Orange类中,给出howToEat方法的特殊实现;
(4)在每一个类中重写toString方法,以返回类名;
(5)创建类ShowObject,包含main方法和showObject方法;在main方法中创建四个实例,分别为tiger、chicken、apple和orange;然后调用showObject方法显示对象;下面是showObject方法:
public static void showObject(Object obj)
{
System.out.print(obj+":");
if (obj instanceof Eatable)
{
((Eatable)obj).howToEat();
}
else System.out.println("can't eat!");
}
以上是题目   我的问题是    1“在Fruit类中,给出howToEat方法的通用实现,在Apple和Orange类中,给出howToEat方法的特殊实现;”这句话是什么意思呢?              2  在每一个类中重写toString方法,以返回类名  这个也不明白..
求助高手 这个是我们老师的作业其中一道 对接口学的不太好 求助高手解答~

解决方案 »

  1.   

    Fruit类中的实现是水果类公有的,但是Apple里面的实现是特殊的。举个简单例子说,假设Fruit类中的实现是吃瓤,但是水果是削掉皮然后吃(当然可以不削皮直接吃),而橘子则是剥掉皮后吃,这就是一个简单的例子。
    自定义类实现toString方法的作用是,打印该对象。当然这具体的实现中可以有不同的写法,你的题目中是返回类名。也可以是别的实现。
      

  2.   

    Fruit 类也即父类。所以通用方法实现就是指父类的实现方法,因为每个继承Fruit类的都可以吃,你可以在Fruit类这样写 public void howToEat(){ /*这里是你要实现的代码*/}(重写Eatable接口)
    Apple 和Orange类继承Fruit类,所以Fruit类的所有方法Apple 和Orange类。如果在Apple 和Orange类中默认不重写fruit类的方法。 特殊实现也即重写父类函数,可能他跟父类的方法不同。例如Fruit类方法的howToEat是放入口里,而Apple类是不需要拨皮的,而橘子是要煮熟才能吃的(举个例子),那么就不能调用Fruit类的方法了,只能自己重写函数,就是分别写个howToEat()函数,此时因为父类已经继承了Eatable接口,所以子类也不需要继承了,只需重写函数就行了。
    重写toString方法返回类名也就是调用toString方法返回的是类名,可以在父类(Fruit)重写写toString函数,如下 public  String toString()
    {   System.out.println(this.getClass().toString());   //输出类名,测试用
    return this.getClass().toString();            //返回类名,也即从写了toString方法
                                                                 //以后每次调用toString方法则返回类名
    }希望对你有帮助。
      

  3.   


    interface Eatable
    {
    public void howToEat();
    }class Animal
    {
    public String toString()
    {
    return "Animal";
    }
    }class Tiger extends Animal
    {
    public String toString()
    {
    return "Tiger";
    }
    }class Chicken extends Animal implements Eatable
    {
    public void howToEat()
    {
    System.out.println("can eat!!!");
    }
    public String toString()
    {
    return "Chicken";
    }
    }class Fruit implements Eatable
    {
    public void howToEat()
    {
    System.out.println("can eat!!!");
    }
    public String toString()
    {
    return "Fruit";
    }
    }class Apple extends Fruit
    {
    public void howToEat()
    {
    System.out.println("can eat!!!");
    }
    public String toString()
    {
    return "Apple";
    }
    }class Orange extends Fruit 
    {
    public void howToEat()
    {
    System.out.println("can eat!!!");
    }
    public String toString()
    {
    return "Orange";
    }
    }
    public class Demo
    {
    public static void main(String args[])
    {
    Tiger t = new Tiger();
    Chicken c = new Chicken();
    Apple a = new Apple();
    Orange o = new Orange(); showObject(t);
    showObject(c);
    showObject(a);
    showObject(o);
    }
    public static void showObject(Object obj)
    {
    System.out.print(obj+":");
    if (obj instanceof Eatable)
    {
    ((Eatable)obj).howToEat();
    }
    else 
    System.out.println("can't eat!!!");
    }
    }
      

  4.   


    好例子!
    can eat!!! 可以改成削皮吃,剥皮吃,洗洗吃,煮了吃!!!!!