为了账号安全,请及时绑定邮箱和手机立即绑定

如何选择抽象类和接口?

对于初学者来说,决定选择哪一个接口可能会让他们觉得难以抉择,因为接口本质上是一个完全抽象的类。

照片由 Oliver Roos 拍摄,感谢 Unsplash

抽象类(Abstract Class)
  • 抽象类不能单独实例化,并且可以包含没有实现的方法(抽象方法)以及有实现的方法。
  • 抽象类同样可以拥有构造函数和成员变量。

用法如下:

  • 当你希望提供一个子类可以扩展或覆盖的默认行为时,可以使用抽象类(abstract class)。
  • 当一组相关的类具有共有的特性和行为时,也可以使用抽象类。
接口
  • 在Java中,接口是一个定义一组方法签名的模板,仅包含方法签名而不包含方法体和静态final变量。
  • 接口不能有构造器,也不能有实例变量(静态final变量除外)。

应用场景:

  • 在你想让类实现一组特定的方法时,使用接口。
  • 当不同且不相关的类需要实现共通功能而不必强制加入层级结构时。
在抽象类和接口之间做出选择
  • 抽象类(abstract class) 当你想要为某些方法提供默认实现时很有用,并让子类来实现其他方法。它们还可以包含状态,比如成员变量。
  • 接口(interface) 当你希望指定一组类需要遵循的契约时很有用,特别是当这些类不一定通过继承关系相关时。

以下是一些场景示例:

  • 抽象类的例子: 比如说你有不同类型的车辆(汽车、卡车等),它们有一些共同的行为,但也有各自独特的行为:
    abstract class Vehicle {  
        // 普通方法
        public void start() {  
            System.out.println("车辆启动了...");  
        }  

        // 抽象方法
        public abstract void stop();  
    }  

    class Car extends Vehicle {  
        // 方法实现
        public void stop() {  
            System.out.println("汽车停了...");  
        }  
    }  

    class Truck extends Vehicle {  
        // 方法实现
        public void stop() {  
            System.out.println("卡车停了...");  
        }  
    }

接口示例:例如: 假设你有不同的员工(比如经理、工程师),他们承担不同的职责,但都需要实现一个通用的功能。

接口 Worker {  
    void 工作();  
}  

类 Manager 实现 Worker {  
    public void 工作() {  
        输出("经理在干活...");  
    }  
}  

类 Engineer 实现 Worker {  
    public void 做事() {  
        输出("工程师在搞技术...");  
    }  
}
来自Java标准库的一些示例

请注意,原文中的破折号在中文翻译中保持一致。

(注:删除此句)

来自Java标准库的相关示例

以下是从Java平台来的五个抽象类:

  1. java.util.AbstractList(抽象列表类)
  2. java.util.AbstractMap(抽象映射类)
  3. java.util.AbstractSet(抽象集合类)
  4. java.io.Reader(读取器类)
  5. java.nio.channels.spi.AbstractInterruptibleChannel(可中断通道抽象类)

这里列出了Java库中的五个接口:

  1. java.util.List - Java中的列表类
  2. java.util.Map - Java中的映射类
  3. java.util.Set - Java中的集合类
  4. java.lang.Comparable - Java中的可比较接口
  5. java.io.Serializable - Java中的序列化接口
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消