面向对象进阶4:抽象和接口

本文探讨了Java中的final关键字在类、方法和变量上的应用,介绍了final如何保证对象的唯一性和不可修改性。此外,详细讲解了抽象类的定义、抽象方法和非抽象方法,以及接口的规范、实现和接口与抽象类的区别。最后,阐述了接口新特性在JDK8及以后版本中的作用。
摘要由CSDN通过智能技术生成

final

final关键字,最终,通常代表不能修改的属性

可以修饰类,方法,变量

final 类:最终类,不能被继承的类
final 方法:最终方法,不能被重写的方法
final 变量:最终变量,只能被赋值一次,不能被修改的变量

修饰基本类型变量时,变量存储的数据不能被改变

修饰引用类型的变量时,变量存储的地址不能被改变,但内容可变

final关键字可以确保对象的唯一性和不可修改性

抽象类

一种特殊的类,不能被实例化,只能被继承,抽象类的存在就是为了被其他类继承,提供了一种模版或者蓝图给子类,规定其应该具有的方法或者属性

抽象类的定义

使用关键字abstract定义

抽象类中可以包含抽象方法和非抽象方法

抽象方法只有方法声明没有方法体,将方法交由子类去实现

非抽象方法子类可以直接继承,提高代码的复用性

public abstract class Abstract {
    private int a;
    private int b;
    
    public abstract void show();
    public abstract void aaaa();

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

    public int getB() {
        return b;
    }

    public void setB(int b) {
        this.b = b;
    }
}

抽象类的应用

模版方法设计模式

像是一个定义算法框架的模版,包含了一些步骤,但步骤的具体实现是可以稍后交由子类去完成的

举个例⼦,你有⼀个做蛋糕的模板,其中包含了⼀些基本的步骤,⽐如准备材料、混合材料、烘烤 等。但是,具体的蛋糕种类和材料可以由⼦类来决定。⽐如,⼦类可以是做巧克⼒蛋糕的类,可以决 定使⽤什么样的巧克⼒和添加什么样的调料。

在这个例子中,蛋糕模版就可以用抽象类实现,而其中的具体制作过程则交由继承抽象类的子类完成

1,提高代码复用性:将算法框架和具体实现分离,以免重复编写相同代码

2,简化代码维护:修改和扩展在抽象类中进行,减少维护工作

3,提高代码可读性

接口

一种规范,规定了一个类应该有哪些方法以及如何使用这些方法,接口定义了一组方法的集合,但是没有具体的实现代码

接口可以看做一份说明书,告诉其他类需要实现的方法清单,但并不关心方法具体实现的细节,实现接口的类必须提供接口中定义方法的具体实现.

接口提供了多态的特性,增强了代码的灵活性和可扩展性

public interface Interface {
    public abstract void method1();
    public abstract void method2();
}

class interfacetest1 implements Interface{
    @Override
    public void method1() {
        
    }

    @Override
    public void method2() {
        
    }
}

接口和抽象类的对比

1,定义方式

抽象类使用abstract定义,可以包含抽象方法和具体方法

接口使用关键字interface定义,只能包含抽象方法和常量

2,继承关系

一个类只能继承一个抽象类,但可以实现多个接口

3,构造方法

抽象类可以有构造方法,但接口不能有构造方法

4,方法实现

抽象类中可以存在抽象方法也可以存在具体方法,但接口中只能有抽象方法

5,成员变量

抽象类中可以有成员变量,但接口中只能设置常量

为什么有了接口还需要存在抽象类

1,接口是一种规范,定义了一组抽象方法的集合,用于定义类的行为规范,促使类之间的解耦合,提高代码的可维护性和扩展性.

解耦合:减少模块与模块间的耦合度

2,抽象类是一种特殊的类,不能被实例化,只能被继承,抽象类中既可以有抽象方法,也可以有非抽象方法.主要用于作为父类为子类提供通用的属性和方法,提高代码的复用性.也可以通过继承来提高代码的扩展性.

3,一个项目中可以同时存在接口和抽象类,并且他们可以互相配合使用.

可以先定义接口来规范类的行为,再通过抽象类来实现接口中的方法

jdk8之后的接口新特性

1,引入默认方法,可以在接口中定义带有方法体的方法,这些方法将在实现类中默认实现

2,引入接口静态方法,可以在接口中定义静态方法,与默认方法类似,但不需要实现类来提供他们的实现,可以通过接口名称直接调用,甚至不需要创建接口实例.

3,引入私有方法,可以在接口中定义私有方法,私有方法可以在接口内部被其他默认方法或是静态方法调用,但不能在接口的实现类或者其他类中使用,私有方法的存在是为了在接口中重复使用公共逻辑,提高代码复用性.

4,引入私有静态方法,只能在接口内部被其他静态方法或者是私有方法调用,同时和私有方法一样不能被实现类或是其他类中调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值