抽象类、接口简单总结

抽象类

1、什么是抽象类?

​ 类与类之间具有共同特征,将这些特征提取出来,形成的就是抽象类。

2、抽象类属于什么类型?

​ 抽象类也属于引用数据类型

3、抽象类的定义

[ 修饰符列表 ] abstract class 类名{
		类体
} 

4、什么是抽象方法?

​ 抽象方法表示没有实现的方法,没有方法体的方法。

public abstract void doSome(); // 抽象方法

​ 特点:以分号结尾,没有方法体,带abstract关键字修饰方法。

5、特性

​ (1) 抽象类无非实例化,无法创建对象,是用来被子类继承的,抽象类有构造方法,为子类提供。

​ (2) final与abstract关键字不能联合使用,两个关键字之间是对立关系。

​ (3) 抽象类的子类可以是抽象类,也可以是非抽象类。

​ (4) 抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法供子类使用。

​ (5) 抽象类中不一定有抽象方法,抽象方法必须出现在抽象类中。

(6) 非抽象类继承抽象类,必须将抽象类中的抽象方法进行覆盖/重写/实现。

接口

1、基本概述

​ 1、接口也是一种引用数据类型。

​ 2、接口是完全抽象的(特殊的抽象类)

​ 3、接口定义:

[修饰符列表] interface 接口名{}

​ 4、编译之后也是class文件。

​ 5、接口支持多继承。

​ 6、接口中只包含两部分:常量和抽象方法,并且所有的元素都是public修饰的(都是公开的)。

// 以下正确写法
interface Math{
    // 常量 PI pi 都不能被再次修改
    public static final double PI = 3.14;
    // 省略 public static final 写法 接口中的变量编译器默认会改为常量
    double pi = 3.1415926;
    public abstract int sum(int a,int b);
    // 接口中都是抽象方法,public abstract 可以省略不写,因为都是抽象方法,所以不能有方法体
    int add(int a,int b); 
}

2、基础语法

​ 1、类和类之间叫做继承,类和接口之间叫做实现,也可以把实现理解为"继承",使用implments关键字来实现。

​ 2、一个非抽象的类实现接口,必须将接口中的所有抽象方法全部实现(覆盖/重写)。

​ 3、一个类同时可以实现多个接口,弥补了java中类与类的单继承。

​ 4、java的接口还有个骚操作,接口之间没有继承关系,也能进行强制转换,编译不会报错。

​ 5、extedns和implements可以共存,extends在前,implements在后。

​ 6、使用接口时,可以使用多态(父类型引用指向子类型对象)。

interface MyMath{
    double PI = 3.14;
    int sum(int a, int b);
}
// 非抽象类实现接口 错误:MyMathImpl 不是抽象类,未覆盖MyMath中的抽象方法sum(int,int)
class MyMathImpl implements MyMath{
}
// 正确写法 1
abstract class MyMathImpl implements MyMath{
}
// 正确写法 2
class MyMathImpl implements MyMath{
	public int sum(int a ,int b){
        return a + b;
    }   
}

3、接口的作用(解耦合)

​ 接口是抽象的。

​ 菜单是一个接口。(菜单上有一个抽象的照片:西红柿炒鸡蛋)

​ 谁面向接口调用。(顾客面向菜单点菜,调用接口。)

​ 谁负责实现这个接口。(后台的厨师负责把西红柿鸡蛋做好!是接口的实现者。) 这个接口有什么用呢?
​ 这个饭馆的“菜单”,让“顾客”和“后厨”解耦合了。
​ 顾客不用找后厨,后厨不用找顾客。他们之间完全依靠这个抽象的菜单沟通。

​ 面向接口编程,可以降低程序的耦合度,提高程序的扩展力。符合OCP开发原则。
​ 接口的使用离不开多态机制。(接口+多态才可以达到降低耦合度。)

​ 接口可以解耦合,解开的是谁和谁的耦合!!!
​ 任何一个接口都有调用者和实现者。
​ 接口可以将调用者和实现者解耦合。
​ 调用者面向接口调用。
​ 实现者面向接口编写实现。一般都是将项目分离成一个模块一个模块的,模块和模块之间采用接口衔接。降低耦合度。

抽象类和接口有什么区别?

​ 抽象类是半抽象的。
​ 接口是完全抽象的。

​ 抽象类中有构造方法。
​ 接口中没有构造方法。

​ 接口和接口之间支持多继承。
​ 类和类之间只能单继承。

​ 一个类可以同时实现多个接口。
​ 一个抽象类只能继承一个类(单继承)。

​ 接口中只允许出现常量和抽象方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值