天天看点

每日一学(14)——(面向对象)抽象类作为方法参数与返回值

抽象类作为方法参数

当遇到方法参数为抽象类类型时,要传入一个实现抽象类所有抽象方法的子类对象。如下代码演示:

package day14;

public abstract class Animal {

   public abstract void eat();

}

package day14;

public class Cat extends Animal {

    @Override

    public void eat() {

        // TODO Auto-generated method stub

          System.out.println("猫在吃鱼");

    }

}

package day14;

public class Gog extends Animal {

    @Override

    public void eat() {

        System.out.println("狗吃骨头");

    }

}

package day14;

public class testanimalArgument {

    public static void main(String[] args) {

        //掉用operatorAnimal,传递子类对象

        Cat p=new Cat();

        operatorAnimal(p);

        operatorAnimal(new Gog());//匿名对象

    }

    //如果传递的是Cat,Gog 类将无法调用

        public static void operatorAnimal(Animal p){

            //引用变量p,调用方法eat

            p.eat();

        }

}

抽象类作为方法返回值 

抽象类作为方法返回值的情况,也是有的,这时需要返回一个实现抽象类所有抽象方法的子类对象。如下代码演示:

package day14;

public class getAnimal {

 public Animal getAnimal(){

     return new Cat();

 }

}

package day14;

public class TestReturnAnimal {

  public static void main(String[] args) {

      //调用getAnimal类的方法,getAnimal返回值是Animal

      getAnimal s=new getAnimal();

      Animal p=s.getAnimal();//方法返回Animal类型,return new Cat();

      p.eat();

}

}

类作为方法返回值还可以传递参数

 public Animal getAnimal(int i){

     if(i==0)

     return new Cat();

     return new Gog();

 getAnimal s=new getAnimal();

      Animal p=s.getAnimal(0);//方法返回Animal类型,return new Cat();

      p.eat();