Java----抽象类,接口

抽象类


1.抽象类存在的意义

抽象类被继承时才有意义
抽象类可以将设计与实现分离,当子类拥有一个共同的行为但各自的实现方式又不同时(例如动物吃饭),父类在此时就不需要先实现这种行为再让子类去重写,可以通过声明一种抽象方法,让子类自己去实现
在这里插入图片描述

2.抽象类的特点

抽象类中可以没有任何抽象方法,这样做主要是为了不让其他类创建本类对象,通过子类去完成


(1)抽象类,抽象方法必须用关键字abstract修饰,如abstract class … public abstract void …
(2)抽象类不一定有抽象方法,抽象方法一定在抽象类或者接口中
例:抽象方法 public abstract void eat();只有方法名却没有方法体
【当不知道一个类具体是如何实现的时,可以使用抽象方法】
(3)抽象类不能被实例化,因为抽象类中有抽象方法,创建抽象类的实例化,调用抽象方法是没有意义的,但是可以通过父类引用指向子类对象去声明,进行实例化
(4)抽象类的子类:抽象类或者重写了抽象类中所有的抽象方法

3.抽象类的成员特点

(1)成员变量可以是变量也可以是常量,但是abstract不能够修饰成员变量,没有意义
(2)可以有构造方法,用于子类访问父类进行的数据初始化
(3)既可以有抽象方法,也可以有非抽象方法

4.抽象类成员方法特征

(1)抽象方法:强制要求子类做的事情(对子类有了规定)
(2)非抽象方法:子类直接继承父类的事情


接口


1.概念

对外提供规则的都算是接口(Java中的Interface)

2.特点

(1)interface 接口名()
(2)类实现接口用implement 例:class 类名 interface 接口名()
(3)接口不能被实例化(但是可以使用多态的方法进行实例化,接口在此时类似于父类)
(4)接口的子类:
可以是抽象类,但是意义不大;
可以是具体类,要重写接口中所有的抽象方法、

3.接口存在的意义

一、接口优缺点一句话总结:对扩展开放,对修改关闭。
二、一旦公开接口发布之后,它就不能被修改了。所以接口的职责应该尤其单一。
三、如果使用接口但是希望可扩展,那么仍然考虑使用抽象类:因为我们可以向类中添加新的成员——只要这个新成员不是abstract的,就不会破坏外部已经出现的依赖。不过加上之后,API设计是否合理,语义是否清晰,就是另一回事情了
四、类是静态的抽象(事物的本质,特性等),而接口是动态的抽象(事物的行为等),选择抽象类与接口,我的看法是,对一类事物进行抽象用抽象类,对行为进行抽象时用接口中。
详细关于接口意义的解释

4.接口的成员特点

(1)成员变量只能是常量,并且是公共的,静态的【public static final】
(2)成员方法:接口没有构造方法!!!
(3)成员方法:只能是抽象方法(权限修饰符:public abstract )
(4)接口中的方法,变量都是公共的,接口遵循对外暴露的原则

5.类与类,接口与接口,类与接口的关系

类与类:单继承,可以多层继承
类与接口:实现关系(可以关系单实现,可以多实现),继承关系,可以同时实现和继承
接口与接口:继承关系(可以单继承也可以多继承)

6.抽象类和接口的区别

(1)成员:
成员变量:抽象类变量可以任意,接口成员只能是常量
成员方法:抽象类成员方法可以是抽象的也可以是非抽象的,接口的成员方法只能是抽象的
构造方法:抽象类可以有构造方法,接口不能有构造方法
(2)设计理念:
抽象类:继承体系中的共性功能
接口:该继承体系中的扩展功能

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值