从对子类影响角度分析抽象类和接口的区别

本文通过具体示例对比了Java中抽象类与接口的不同之处,特别是在对子类的影响方面进行了详细解析。指出抽象类的子类是抽象类所抽象的对象,而接口的实现类则具备接口定义的功能。

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

在java中,无论是写代码、面试、交流,均不可或缺的提到一个问题,抽象类和接口的区别
网上可谓众说纷纭,再次不在多说,想知道的请找度娘。
我今天想分享的是在对“子类”/“实现者”的影响角度来分析二者的区别:

抽象类

首先, 我们来从抽象类 的三个字进行分析:
抽象类的主体是 ,只不过这个类 是抽象的
那么,他就具有了应该具备类的全部功能,但他是抽象的,那么他必然可以有一般类不具有的东西——抽象方法
至于抽象类和类的差别,不是此文章的重点,再次不在细说。
抽象天生就是用来继承(extends)的,他决定子类/派生类是什么的问题。
如:

/**
 * 
 * 鸟的父类
 * 假设鸟只会飞和吃
 * 
 * <br>==========================
 * <br> 开发:myhc2014@163.com
 * <br> 创建时间:2015年10月16日下午6:45:07
 * <br>==========================
 */
public abstract class Brid {

    /**
     * 飞,子类将要复写该方法,实现自己的飞行方式
     */
    public abstract void fly();

    /**
     * 吃
     */
    public void eat() {

    }  
}


/**
 * 
 * 百灵鸟
 *  
 * <br>==========================
 * <br> 开发:myhc2014@163.com
 * <br> 创建时间:2015年10月16日下午6:44:40
 * <br>==========================
 */
public class Lark extends Brid {


    @Override
    public void fly() {
        // 实现百灵鸟到底是怎么飞的
    }

}

我们可以很明确的说,百灵鸟是鸟

接口

我们来看看,接口是什么?
有人说,接口是对抽象类的抽象,把抽象类中所有类的东西,都抽出去了,剩下的部分就是接口。
我不反对,这的确是一个接口抽象的过程。
但接口能用来干什么呢?
在实际开发中,接口往往用于定义协议或者定义功能
接口是类的一个附加功能,如果一个类实现了某个接口,说明该类具备某种能力;
而并不能说,xx类对象,是某接口的子类(这样说主要是区别于抽象类)。

引用上面的百灵鸟例子。
大家都知道,百灵鸟区别于其他鸟的最大特点应该是唱歌了吧,
我们定义一个唱歌者接口

/**
 * 
 * 唱歌者
 *
 * <br>==========================
 * <br> 公司:奇虎360
 * <br> 创建时间:2015年10月16日下午6:37:35
 * <br>==========================
 */
public interface IMusicer {

    /**
     * 唱歌
     */
    void sing();  
}

由于百灵鸟会唱歌,百灵鸟的类就可以进化一下:

/**
 * 
 * 百灵鸟
 *
 * <br>==========================
 * <br> 公司:奇虎360
 * <br> 开发:chenbaolong@360.cn
 * <br> 创建时间:2015年10月16日下午6:43:38
 * <br>==========================
 */
public class Lark extends Brid implements IMusicer {

    @Override
    public void sing() {
        // 百灵鸟唱歌

    }

    @Override
    public void fly() {
          // 实现百灵鸟到底是怎么飞的

    }

}

通过上面的代码实例,
通常情况下,我们会说,看到了一个会唱歌的百灵鸟,却不会说一个会飞的歌手
当然,如果商场有活动,需要一个歌手唱支歌,把一个百灵鸟放上去,也是可以的,因为
他具备歌手的唱歌能力。

总结

通过上面的介绍,不知道您是否知道了抽象类和接口,在对子类影响中的地位。
通过对抽象了和接口的理解,能加深对设计模式的理解,也能对事务的抽象能力。
千言万语汇成一句话:
抽象类的子类一定是抽象类所抽象的对象接口的实现类一定具备接口所定义的功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值