接口和抽象类的区别,如何看待?

本文主要介绍了Java中接口和抽象类的区别。从方法定义看,接口多为抽象方法;修饰符上,接口默认是public;构造器方面,抽象类有而接口无。此外,类可多实现接口但单继承抽象类,二者职责也不同,接口重规范,抽象类重复用。

先看一下例子

接口

public interface PayService{
    public void pay(PayRequest payRequest);
}

抽象类

public abstract class AbstractPayService implements PayService {
    @Override
    public void pay(PayRequest payRequest){
        //前置检查    
        validateRequest(payRequest);
        //支付核心逻辑
        doPay(payRequest);
        //后置处理
        postPay(payRequest);
    }

    public abstract void doPay(PayRequest payRequest);

    private void postPay(PayRequest payRequest){
    //支付成功的后置处理
    }

    public void validateRequest(PayRequest payRequest){
    //参数检查
    }
}

区别如下

  1. 方法定义: 接口和抽象类,最明显的区别就是接口只是定义了一些方法而已,在不考虑Java8中default方法情况下,接口中只有抽象方法,是没有实现的代码的(Java8中可以有默认方法,避免实现类要写一堆的空实现)
  2. 修饰符: 抽象类中的修饰符中可以有public、protected和private和default修饰符,而接口中默认修饰符是public。不可以使用其它修饰符。接口中,如果定义了成员变量,还必须要初始化。
  3. 构造器:抽象类可以有构造器。接口不能有构造器。
  4. 抽象类不能直接被实例化出来,但是构造器也是有意义的,能起到初始化共有成员变量、强制初始化操作等作用
  5. 单继承、多实现:一个类可以实现多个接口,但只能继承一个抽象类。接口不能实现接口,但是可以多重继承其他接口。
    public interface TestService extends InitializingBean,DisposableBean {}
  6. 职责不同:接口和抽象类职责不一。接口主要用于制定规范,从而面向接口编程。而抽象类主要目的是为了复用,比较典型的就是模板方法模式。

一般在实际开发中,我们回先把接口暴露给外部,然后在业务代码中实现接口。如果多个实现类中有相同可复用的代码,则在接口和实现类中间加一层抽象类,将公用部分代码抽出到抽象类中。(后续出一版模板方法模式博文讲述)

<think> 嗯...用户提出了一个非常宽泛的哲学性问题"如何看待数学问题"。虽然问题简短,但涉及数学本质、学习方法应用价值等多重维度。 注意到用户要求进行网络搜索,但这类抽象问题可能更适合综合学术观点而非具体事实检索。考虑到数学作为基础学科的特性,准备从三个层面构建回答:认知层面(数学思维特性)、实践层面(问题解决路径)、应用层面(跨学科价值)。 在格式处理上特别注意:避免使用"首先/然后"等连接词,采用分块式结构。每个观点段落保持独立,用换行分隔。最后的相关问题设计需要紧扣数学认知、学习方法应用场景这三个衍生方向。 关于数学公式的呈现有个细节考量:虽然回答中引用了$P≠NP$这样的经典问题,但刻意避免使用独立公式块($$ $$),因为当前回答不需要展示复杂推导过程。所有数学符号都规范地包裹在$符号内。 最后的相关问题部分严格遵守了标题格式要求:"§§相关问题§§:"严格位于行首且无多余空格。三个问题分别指向数学本质理解、解题能力提升跨学科应用,与主回答形成纵深呼应。特别确保第三个问题提及编程实践,既延续了数学的应用价值讨论,又为可能的后续技术类问题埋下接口。 </think> 对数学问题的看法可概括为以下三个维度: ### 数学的本质特性 数学以逻辑严密性抽象性为核心。其命题需通过公理体系与演绎推理严格证明,如希尔伯特形式化系统。抽象符号(如$f(x)$)能剥离具体场景描述普遍规律,使微积分既可建模天体运动也能分析经济曲线。数学真理具有客观性,$1+1=2$在任何文明中均成立,这种确定性区别于经验科学。 ### 问题解决的方法论 **拆解复杂问题**:将难题分解为子问题链,例如证明费马大定理时需先建立椭圆曲线与模形式的关联。 **多路径探索**:线性代数(矩阵运算)与几何(向量空间)可互为工具解决同一问题。 **逆向思维应用**:反证法通过假设结论不成立推导矛盾,如证明$\sqrt{2}$是无理数。 ### 实践应用价值 数学是科技发展的基础语言,具体表现为: - **基础科学支撑**:黎曼几何为广义相对论提供数学框架,偏微分方程建模流体动力学 - **技术突破驱动**:离散数学优化算法复杂度,支撑人工智能(如梯度下降法) ```python # 梯度下降法核心代码示例 def gradient_descent(lr, epochs): for _ in range(epochs): grad = compute_gradient() # 计算梯度 params -= lr * grad # 参数更新 ``` - **跨学科渗透**:数论应用于密码学(RSA加密),随机过程分析金融市场波动 数学问题的思考过程训练了严谨的逻辑链条构建能力,这种思维模式可迁移至法律论证、工程调试等非数学领域。同时,未解难题(如$P$与$NP$问题)持续推动人类认知边界的拓展。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值