抽象类作为方法参数
当遇到方法参数为抽象类类型时,要传入一个实现抽象类所有抽象方法的子类对象。如下代码演示:
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();