JAVA接口和抽象类

抽象类和抽象方法:

抽象类和抽象方法的概念:*当一个类的方法被abstract关键字修饰时,那么这个方法成为抽象方法。抽象方法存在的类必须定义为抽象类;抽象类不能被实例化。*

  • 语法:

    public abstract class 类名称{
    修饰符 abstract 返回值类型 方法名();
    修饰符 返回值类型 方法名(){
    方法体
    }
    }
    
  • 要点:

    **抽象类不能被实例化,可以没有,有一个或者多个抽象方法。
    抽象方法有声明无实现,有抽象方法的类必须声明为抽象类。
    子类必须重写所有的抽象方法才能被实例化,否则还是一个抽象类。
    如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类。
    没有抽象构造方法,也没有抽象静态方法。
    抽象类中可以有非抽象的构造方法,创建子类的时可能调用。**
    

- 接口

  • 接口的定义:
    接口是一种标准和规范,他可以约束类的行为,是一些方法特征的集合,但是没有方法的实现。

  • 接口的好处:
    有利于代码的复用、代码的扩展和维护。

  • 接口语法
    public interface 接口名 extends 父接口1,父接口2{}
    public class 类名 extends 父类名 implements 接口1,接口2{}

  • 接口的注意事项:
    **接口中的方法默认都是public abstract的抽象方法。
    接口没有构造方法,不能被实例化。
    一个接口可以继承多个就扣,但是不能继承类。
    接口的实现类必须实现接口的全部方法,否则必须定义为抽象类。
    类只能继承一个父类,但可以通过implements实现多个接口。
    一个类必须实现接口的全部方法,否则必须定义为抽象类。
    若一个类在继承父类的同时又实现了多个接口,extends必须位于implements前。**

  • 接口和抽象类的区别
    相同点:
    1、都代表系统的抽象层。
    2、都不能被实例化。
    3、都能包含抽象方法。
    4、用于描述系统提供的服务,不必提供具体实现。
    不同点:
    1、抽象类可以为部分方法提供默认实现,接口中只能包含抽象方法。
    2、抽象类便于复用,接口便于代码维护。
    3、一个类只能继承一个直接父类,但能实现多个接口

  • 接口的优势
    接口表示一种能力,一个类实现了某个接口,就表示这个类具备了某种能力,一个类可以实现多个接口。
    接口弥补了JAVA只能单继承的缺点,还有利于代码的扩展和维护。
    接口类似于一个组件,需要时可以自由组装。
    从使用者的角度来讲,接口和抽象类的区别在于:抽象类利于代码复用,接口利于代码维护。
    接口可以降低代码的耦合性,提高代码的可扩展性和可维护性。
    设计良好的接口就像日常使用的万能插座,不论插头如何变化,都能使用。

  • 面向对象设计原则
    1、摘取代码中变化的行为,形成接口。
    2、多用组合,少用继承。
    3、针对接口编程,不依赖与具体实现。
    4、针对扩展开放,针对改变关闭。

  • 总结
    接口和抽象类的区别:
    1、抽象类只能被继承,而且只能被单继承。
    接口可以被实现,而且可以多实现。
    2、抽象类中可以定义非抽象方法,子类可以直接继承使用。
    接口中都有抽象方法,需要子类去实现。
    3、抽象类使用的是 is a 关系。
    接口使用的是 like a 关系。
    4、抽象类的成员修饰符可以自定义。
    接口中的成员修饰符是固定的,全都是public的。

Java中的接口抽象类都是重要的概念。接口是一种抽象类型,它定义了一组抽象方法的集合,没有方法体和实现。接口只描述了方法和常量,没有属性。类可以通过实现接口来继承接口的抽象方法。接口是一种更加抽象的类型,比抽象类更加“抽象”,并且一般情况下不在接口中定义变量。 抽象类是一个可继承的类,它可以包含一个或多个抽象方法。抽象方法是没有方法体的方法,只有方法的声明。抽象类可以包含非抽象方法和属性,也可以实现接口抽象类规定了一个类必须做什么而不规定如何去做。 在Java中,抽象类接口都可以用于实现多态和代码重用。抽象类主要用于抽象共性的类,而接口主要用于描述行为的规范。根据实际情况,我们可以选择使用抽象类接口来设计我们的程序。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Java抽象类接口](https://blog.csdn.net/LEE180501/article/details/128061940)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Java 抽象类接口](https://blog.csdn.net/sheng0113/article/details/121319075)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值