天天看點

每日一學(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();