抽象類作為方法參數
當遇到方法參數為抽象類類型時,要傳入一個實作抽象類所有抽象方法的子類對象。如下代碼示範:
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();