天天看点

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的。