每日一学(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());//匿名对象
    }
    /*
     * 方法operatorAnimal,参数是一个抽象类
     * 调用方法,传递Animal类型的对象,Animal没有对象
     * 只能传递Animal的子类的对象(多态)
     * 可以传递Animal的任意的子类对象
     */
    //如果传递的是Cat,Gog 类将无法调用
        public static void operatorAnimal(Animal p){
            //引用变量p,调用方法eat
            p.eat();
        }
}

抽象类作为方法返回值 

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

package day14;

public class getAnimal {
    /*
     * 定义方法,方法的返回值是Animal类型
     * 抽象类,抽象没有对象的,因此在方法的return后,返回Animal的子类的对象
     */
 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();

猜你喜欢

转载自blog.csdn.net/weixin_42517286/article/details/81287837