java中接口与抽象类异同点与在项目中的应用

1包
	作用: 管理类
	定义: package  包名;
		package必须作为源文件 的第一条语句
		包名的命名规则
	使用其他包中的类
		完整类名
		先import导入类,再使用
2 Eclipse
3 访问权限
	类的访问权限: 公共类, 非公共类
		公共类的应用场景, 想让其他包中的类使用
	类成员的访问权限
		私有的,private, 
		默认的
		受保护的,protected
		公共的,public
		使用时,遵循访问权限最小化原则
4Object
	所有类的根父类
	Java类的继承是可传递的
	clone() ,  finalize() ,  notify()/wait(),  
	getClass(), 判断两个对象的类型是否一样
	toString(), 把对象转换为字符串, 默认是: 完整类名@哈希码的十六进制
		System.out.println()打印对象时会调用对象的toString(), 想打印对象时,显示对象的字段值,需要重写toString()
	equals(), 判断堆中对象的 内容是否一样
		==判断两个变量的值是否相同, 如果两个引用类型变量==相等,说明这两个引用指向堆中同一个对象.
		根据哈希约定,如果两个对象equals()相等,这两个对象的hashCode也应该一样

1 final关键字
final关键字可以修饰类, 修饰成员变量,修饰方法, 修饰局部变量, 修饰方法的形参

final修饰类, 表示最终类, 不能被继承
final修饰字段,在定义时必须初始化, 不能被修改, 一般与static同时使用称为final常量, 所有字母都大写
final修饰方法,不能被重写, 在子类中不能定义相同签名的方法
final修饰局部变量, 一旦初始化就不能再修改, final修饰引用类型变量,是指这个引用不能再指向其他对象,可以修改它的属性值
final修饰方法的形参, 在方法体中不能对final形参赋值

2 抽象方法与抽象类
2.1 抽象方法
可以把所有的矩形抽象为矩形 类, 把所有的圆形抽象为圆形类, 把所有的三角形抽象为三角形类, 进一步把所有的平面图形抽象类平面图形类.
平面图形有求面积,求周长的操作, 但是不同的图形具体的实现不一样, 在平面图形类中, 这两个操作没法具体实现.
当一个类的某个操作没法具体实现时,这个操作可以定义为抽象方法

语法:
[方法修饰符] abstract 返回值类型 方法名(参数列表) ;
只有方法的声明没有方法体
含有抽象方法的类必须定义为抽象类

2.2 抽象类
1) 使用abstract修饰的类就是 抽象类
2) 含有抽象方法的类必须定义为抽象类, 但是抽象类中不一定含有抽象方法
即抽象类中可能没有抽象方法
有时,对现有的类进一步抽象,可以形成更高层级的类, 对小狗,小猫,人, 进一步抽象为动物类, 动物类一般作为其他类的父类存在, 不需要对动物类进行实例化, 可以把动物类定义为抽象类
3) 抽象类不能实例化对象(语法), 抽象类中肯定含有构造方法, 子类创建对象执行子类构造方法,在子类构造方法执行前,会先调用父类的构造方法,默认调用父类的无参构造(super()).
4) final与abstract同时使用
3 接口
3.1 概述
电脑上有哪些接口?
USB接口, 电源接口, 耳机接口, 网线接口, Type-C接口, VGA接口, HDMI高清接口, Thunder接口

1)电脑接口的作用?
	电脑通过这些接口连接外设, 扩展了电脑的功能
	电脑有这个接口,可以连接这个接口对应的外设,没有这个接口不具备这个功能
2)电脑上接口的生产厂商和接口连接设备的厂商是同一家吗?
	电脑可以连接各种USB设备, 这些USB设备可能是由若干不同厂商生产的
3) 为什么不同厂商生产的USB设备,插到电脑上就能用??
	使用相同的标准
	usb3.1插槽, 插入USB2.0的设备, 传输速度不是3.1传输速度, 因为它们的协议不同
	USB接口,可以理解为一个协议,一个标准


java中的接口的作用:
  1. 使用接口扩展类的功能
  2. 使用接口可以定义一组操作规范,或者理解为一个协议

如何定义接口
[修饰符] interface 接口名 {
功能, 用方法表示,默认方法使用public abstract修饰
}
可以把接口简单的理解为功能的封装

如何使用接口
	class  类名  implements  接口名 {
重写接口中的抽象方法, 具有了接口中定义的功能

}

说明:
  1. 接口中方法默认使用public abstract修饰
  2. 类实现了接口,需要重写接口中的抽象方法,如果没有重写所有的抽象方法,类也需要定义为抽象类
  3. 一个类在继承父类的同时,可以实现多个接口, 需要重写所有接口的所有抽象方法
  4. 接口也能继承,并且支持多继承
  5. 接口(JDK8)中的内容除了抽象方法外,还可以定义public static final常量 , public static静态方法, 和public default方法
  6. 在开发时, 接口中一般只定义public abstract默认方法, 和public static final常量 ; 如果对已有的项目进行升级, 可能会定义public static方法或者 public default方法
  7. Java的引用数据类型: 类, 接口, 数组, 枚举. 接口也是一种引用数据类型, 接口可以定义变量, 但是接口不能实例化对象, 接口没有构造方法
  8. 接口的引用需要赋值实现类对象, 通过接口引用调用接口中定义的抽象方法, 实际上执行的是实现类对象的方法, 这是接口多态

3.2 抽象类与接口的异同点
相同点:
1)都可以定义抽象方法
2)都不能实例化对象
3)都可以定义public static final常量 , public static方法
4)定义的抽象方法需要被重写
不同点:

  1. 定义方式不同
    抽象类使用 abstract class 定义
    接口使用 interface定义
  2. 内容不同
    抽象类中除了抽象方法外, 还有构造方法等普通类有的所有成员
    接口中除了抽象方法外, 可以定义default修饰的方法, 没有构造方法
  3. 使用方式不同
    抽象类一般作为其他类的父类存在, 需要被extends继承
    接口需要类通过implements实现
  4. 类只支持单继承, 接口可以支持多继承
  5. 应用场景不同
    如果仅仅是为了 扩展类的功能, 优先选择使用接口
    抽象类可以描述类之间的层次关系; 如果除了功能扩展外,还需要保存数据选择抽象类; 抽象类可以约束所有的子类都具有某个功能.

3.3 接口的应用
3.3.1 封装功能
可以把接口简单的理解为对功能的封装.
如:
定义Flyable接口,封装了一个fly()飞行的操作, 如果某个类想有飞行的操作就实现该接口
定义了Swimmable接口, 封装了一个swim()游泳的操作, 如果某个 类实现了该接口,具有了游泳的功能

3.3.2 接口从某种程度上可以解决类的多继承问题
例:
描述打工的学生, 可以让打工的学生类继承学生类, 把打工这个操作定义为一个接口,

描述带橡皮的铅笔

3.3.3 接口可以定义一组操作规范
如 在开发百度新闻时, 有若干的模块, 可以把对新闻的操作定义为一个接口, 所有的模块都实现该接口, 这样就实现了所有模块操作的统一
interface NewsDao {
void addNews();
void deleteNews();
void updateNews();
void listAllNews();
}
所有新闻模块都要实现NewsDao接口, 这样就实现了所有模块操作的统一
这一组操作规范,也可以理解为一个标准,一个协议.

3.4 提倡面向接口的编程
3.4.1 接口比较灵活
一个类在继承父类的同时, 可以实现多个接口, 扩展了类的多个功能
就像电脑有很多的接口, 电脑可以连接很多的外设, 扩展了电脑的多个功能

3.4.2 接口比较容易扩展
接口的引用作为方法的形参, 调用方法时, 可以传递各种实现类对象
对于这个方法来说,具有较高的扩展性/通用性

有时接口类型作为方法的返回值类型, 实际上返回的是各种实现类对象

3.4.3 接口可以使项目分层

通过接口把项目简单的分为两层:
	有一组开发人员负责开发业务逻辑模块, 这些开发人员 不需要精通数据库的操作
	有一组开发人员负责开发数据库的实现类, 他们需要精通数据库的操作, 不关心业务逻辑是什么

总结:

  1. final关键字, 修饰类/字段/方法/局部变量/方法形参
  2. 抽象方法与抽象类
    为什么定义抽象方法? 如何定义抽象方法??
    如何定义抽象类? 如何使用抽象类??
    注意:
    抽象类不能实例化对象, 肯定有构造方法,
    含有抽象方法的类必须定义为抽象类, 抽象类中不一定含有抽象方法
  3. 接口
    接口的定义, interface
    接口的使用, implements
    注意:
  1. 接口中方法默认使用public abstract修饰

  2. 类实现了接口,需要重写接口中所有的抽象方法,如果没有重写所有抽象方法,这个类也需要定义为抽象类

  3. 接口支持多继承

  4. 一个类在继承父类的同时,可以实现多个接口,

  5. 接口是一种引用数据类型, 接口引用赋值实现类对象, 通过接口引用调用接口中的抽象方法,实际上执行的是实现类对象的方法, 这是接口多态. 接口存在的意义就是为了实现多态

  6. 接口的内容只有四部分(JDK8): public abstract方法, public static final常量, public static方法, public default方法
    抽象类与接口的异同点
    相同
    不同
    接口的应用:
    使用接口来封装某个功能
    接口可以部分解决类的多继承问题
    通过接口定义一组操作规范
    提倡面向接口的编程
    接口比较灵活
    比较容易扩展
    可以使项目分层

    4代码:

  7. 打印各种平面图形的面积与周长

  8. 愤怒的小鸟

  9. 主人喂养宠物

  10. 计算出租车租金

  11. 接口的定义与实现
    飞行接口, 小鸟, 飞机…会飞, 弹弓类可以弹射会飞的物体
    游泳接口, 游泳池只接收会游泳的动物来游泳
    打工的学生/ 带橡皮的铅笔

  12. 看懂接口使项目分层的代码

    618年中大促, 不同的商品打折方式不一样, 有九折,8折,7折, 满减, 满返. 打折方式可以定义为一个接口, 商品都有自己的打折方式, 商品有计算折扣后的价格

    描述每种动物都有自己的说话方式

猜你喜欢

转载自blog.csdn.net/qq_30347133/article/details/83148952
今日推荐