抽象类与接口

一、抽象类

1.抽象类定义格式:

        abstract class 类名{

        }

2.抽象类方法的格式:

        修饰符 abstract 返回值类型  方法名();//没有方法体,以分号结束

        抽象类中的非抽象方法,可以有方法体

3.抽象类特点 

        a.抽象类不一定要有抽象方法,但是抽象方法的类一定是抽象类

        b.抽象类不能实例化

        c.抽象类的子类特点:要么是抽象类;要么重写父类中的所有抽象方法

4.抽象类成员的特点

    成员变量:可以有

    成员常量:可以有

    成员方法:可以有抽象方法,也可以有非抽象方法

            1.非抽象方法:子类继承,提高了代码的复用性

            2.抽象方法:强制要求子类做的事情(对子类的一种约束)

    构造方法:有,但是抽象类无法实例化,要构造方法干什么呢?

                    供子类构造方法调用(子类继承父类,子类默认调用父类的无参构造方法)

二、接口

1.接口的定义:

是一种特殊的类,是一系列方法的生命,实现接口就等于扩展功能,是抽象方法的集合,一个类通过实现接口来继承接口的抽象方法。

    接口可以使我们的软件具有良好的可维护性和可扩展性,所以在开发大型的项目时会经常使用

    面向接口编程就是指:软件系统的整体架构是由接口构成。我们可以先设计好这些接口,然后在编写具体的实现类来实现相应的功能。

2.面向接口编程

优点:

        a.接口和实现分离了,适用于团队的协作开发

        b.增强了程序的可扩展性和维护性

缺点:

        a.设计难了,在你没有写实现的时候,就得想好接口,接口一变,全部实现了该接口的类都要变化,这就是所谓的设计比实现难。在软件公司设计接口的人工资都较高啊!做接口设计的人员一般称为系统架构师。

3.接口定义与实现:

    interface 接口名{

    }

  类实现接口:class 类名 implements 接口名{...}

  多实现:class Zi extends Fu implements B,C{...}

4.接口特点:

    a.成员方法:默认修饰符(只能是public abstract),接口中都是公共的、抽象的方法

    b.成员变量:接口中没有成员变量!!!默认修饰符public static final,只能是public-->都是成员常量,因此接口没有构造方法,不能实例化

    c.接口和接口中的方法都是隐式抽象的,无需abstract声明

    d.实现接口的类,要么是抽象类,要么重写接口中的所有抽象方法

!!!注意:

1. Abstract关键字不与final关键字连用,abstract没有方法体,就是用来继承的,而final不能继承

2. Abstract关键字不与static关键字连用,static方法  类名.方法名调用,抽象类无方法体,调用干嘛?是用来做继承的

3. Abstract关键字不与Private关键字连用,因为Private关键字不能继承

三、类、抽象类与接口的比较

类与接口的区别:

        1.类描述对象的属性和方法,接口则包含类要实现的方法

        2.接口不能实例化(抽象类也不能被实例化)

        3.接口没有构造方法

        4.接口不包含成员变量(默认修饰符public static final)-->都是成员常量,不需要构造方法进行初始化,因此接口没有构造函数,不能实例化

        5.类与类是单继承,接口与接口支持多继承,类与接口多实现(接口的优势

多实现:class A extends F implements B ,C{...}

类与接口的相似:

        1.接口文件保存在.java结尾的文件中,文件名必须使用接口名

        2.接口的字节码文件保存在.class结尾的文件中

抽象类与接口的区别:

        1. 抽象类中的非抽象方法,可以有方法体,在抽象类中可以为部分方法提供默认的实现,从而避免在子类中重复实现它们,提高代码的可重用性。(抽象类的优势)接口中都是抽象方法,没有方法体

        2.抽象类的成员变量可以是各种类型,接口中只能是public static final

        3.接口中不能含有静态代码块和静态方法,抽象类可以

抽象类与接口的相似:

        1. 接口和抽象类都不能被实例化,但接口可以被实现

        2. 都能包含抽象方法

        3. 代表系统的抽象层

   4.子类:

要么是抽象类,要么重写所有的抽象方法(接口中全都是抽象方法)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值