类名作为形参和返回值
代码测试:
/*
猫类
*/
public class Cat {
public void eat(){
System.out.println("🐱吃🐟");
}
}
/*
猫猫操作类
*/
public class CatOperator {
public void useCat(Cat c){ //这里要得不是类名,而是对象
c.eat();
}
public Cat getCat(){ //返回Cat类型对象
Cat c = new Cat();
return c;
}
}
public class CatDemo {
public static void main(String[] args) {
CatOperator catOperator = new CatOperator();
Cat c = new Cat();
catOperator.useCat(c);
Cat c2 =catOperator.getCat();
catOperator.useCat(c2);
}
}
运行结果:
- 方法的形参是类名,其实是需要该类的对象
- 方法的返回值是类名,其实返回的是该类的对象
抽象类名作为形参和返回值
测试代码:
/*
抽象动物类
*/
public abstract class Animal {
public abstract void eat();
}
public class Dog extends Animal{
@Override
public void eat() {
System.out.println("狗吃骨头");
}
}
public class Cat extends Animal{
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
public class AnimalOperator {
public void useAnimal(Animal a){
a.eat();
}
public Animal getCat(){
Animal cat = new Cat();
return cat;
}
public Animal getDog(){
Animal dog = new Dog();
return dog;
}
}
public class AnimalDemo {
public static void main(String[] args) {
AnimalOperator animalOperator = new AnimalOperator(); //创建操作类对象
Animal cat = animalOperator.getCat(); //返回类型是Animal的子类Cat类型
animalOperator.useAnimal(cat); //入参是Animal的子类Cat类型
Animal dog = animalOperator.getDog();
animalOperator.useAnimal(dog);
}
}
运行结果:
- 方法的形参是抽象类名,其实需要的是该抽象类子类的对象
- 方法的返回值是抽象类名,其实返回的是该抽象类的子类对象
接口名作为形参和返回值
代码测试:
public interface Jumpping {
void jump();
}
public class Cat implements Jumpping{
@Override
public void jump() {
System.out.println("猫跳高");
}
}
public class JumppingOperator {
public void useJumpping(Jumpping j){
j.jump();
}
public Jumpping getJumpping(){
Jumpping j = new Cat();
return j;
}
}
public class JumppingDemo {
public static void main(String[] args) {
JumppingOperator jo = new JumppingOperator();
Jumpping cat = jo.getJumpping();
jo.useJumpping(cat);
}
}
运行结果:
- 方法的形参是接口名,其实需要的是该接口的实现类对象
- 方法的返回值是接口名,其实返回的是该接口实现类的对象