java中类、抽象类、接口作为形参和返回值

本文通过一个实例展示了如何在Java中使用抽象类和接口进行多态操作。PlayGame接口定义了游戏功能,Phone抽象类定义了电话的基本操作,ElderPhone和CellPhone类分别实现了Phone的抽象方法并提供了具体功能。在测试类中,展示了如何以抽象类和接口作为方法的形参和返回值,实际操作的是它们的子类对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,类名作为形参和返回值

方法的形参是类名,其实需要的是该类的对象
方法的返回值是类名,其实返回的是该类的对象
 

二,抽象类名作为形参和返回值

方法的形参是抽象类名,其实需要的是抽象类的子类对象
方法的返回值是抽象类名,其实返回的是抽象类的子类对象

三,接口名作为形参和返回值

方法的形参是接口名,其实需要的是接口的实现类对象
方法的返回值是接口名,其实返回的是接口的实现类对象

四,案例

类名作为形参和返回值之前的学生信息管理案例有所涉及,不再练习

PlayGame接口

public interface PlayGame {
    String name="小米";
    void playgame();
    void show(PlayGame p);
}

Phone抽象类

public abstract class Phone {
    public String name;
    public abstract void call();
    public abstract void send();
    public abstract void show(Phone p);

}

elderphone,cellphone类

public class ElderPhone extends Phone{
    @Override
    public void call(){
        System.out.println("老年机可以打电话");
    }
    @Override
    public void send(){
        System.out.println("老年机可以发信息");
    }
    public Phone newelderphone(){
        Phone p=new ElderPhone();
        return p;
    }
    @Override
    public void show(Phone p){
        System.out.println(p.name+"这是一个老年机");
    }
}
public class CellPhone extends Phone implements PlayGame{
    @Override
    public void call(){
        System.out.println("智能机可以打电话");
    }
    @Override
    public void send(){
        System.out.println("智能机可以发信息");
    }

    @Override
    public void show(Phone p) {
        System.out.println("智能机");
    }

    @Override
    public void playgame(){
        System.out.println("智能机可以玩游戏");
    }
    public PlayGame newcellphone(){
        PlayGame p=new CellPhone();
        return p;
    }
    @Override
    public void show(PlayGame p){
        System.out.println(p.name+"可以玩游戏");
    }
}

测试类

public class test {
    public static void main(String[] args) {
        System.out.println("--------------------");
        ElderPhone ep=new ElderPhone();
//        返回值是Phone类类型,实际上返回的是Phone的子类对象
        Phone ep1=ep.newelderphone();
        ep1.call();
//        形参是Phone类类型,实际上传的是Phone的子类对象
        Phone ep2=new ElderPhone();
        ep2.name="诺基亚";
//        将name赋值给ep2,可以看出show中传的参数确实是ep2
        ep1.show(ep2);
        System.out.println("--------------------");
        CellPhone cp=new CellPhone();
//        返回值是接口名PlayGame,其实返回的是接口的实现类对象
        PlayGame cp1=cp.newcellphone();
        cp1.playgame();
//        形参是接口名PlayGame,其实需要传入的是接口的实现类对象
        PlayGame cp2=new CellPhone();
        cp1.show(cp2);
    }
}

测试结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值