不同JDK版本接口的不同特性、接口的使用思路、多态的使用条件和优缺点、优化信息管理系统

1. 接口

1.1 JDK8以前的接口特点

  • 接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。
  • 接口存在的意义:1. 制定规则;2. 扩展程序
  • 接口用关键字interface修饰:public interface 接口名 {} 
  • 实现接口用implements表示:public class 类名 implements 接口名 {}
  • 接口中的成员变量: 默认被public,static,final修饰
  • 接口中没有构造方法,实现类中的super( )访问的是Object的构造方法
  • 接口中所有的成员方法都为抽象方法,默认被public,abstract修饰。因为没有具体的方法体,所以实现类可以实现多个接口(JDK7及以前版本特点

1.2 JDK8、9中接口新特点

JDK8及以后版本只对接口中的成员方法做了改进。

解决了接口升级问题:

如果接口升级了,定义许多新的抽象方法,那么所有的实现类都需要去重写新的抽象方法,这样十分麻烦。为了解决接口升级的问题,JDK8中允许接口中拥有非抽象方法即默认方法

  • 默认方法格式:public default 返回值类型 方法名(参数列表) { }
  • 默认方法不是抽象方法,所以在实现类中不强制重写默认方法。在实现类中,默认方法可以被调用和重写,重写的时候去掉default关键字,默认被 public修饰可以省略public。
  • 实现类如果实现了多个接口,并且多个接口中存在相同的默认方法声明,子类就必须对该默认方法进行重写,否则会出现逻辑混乱。

引入了静态方法:

  • 静态方法格式:public static 返回值类型 方法名(参数列表) { }
  • 接口中的静态方法只能通过接口名调用,不能通过实现类名或者对象名调用。(所以不同接口中相同的静态方法不用在实现类中重写)

JDK9中接口的新特性:

Java 8允许在接口中定义带方法体的默认方法和静态方法。这样可能就会带来一个问题:当两个默认方法或者静态方法中包含一段相同的代码实现时,程序必然考虑将这段实现代码抽取成一个共性方法,而这个共性方法是不需要让实现类使用的,因此可以使用private修饰,这就是JDK 9增加的私有方法。

  • 格式1:private 返回值类型 方法名(参数列表) { }
  • 格式2:private static 返回值类型 方法名(参数列表) { }

1.3 接口使用的思路

  1. 如果发现一个类中所有的方法都是抽象方法,那么就可以将该类定义为一个接口。
  2. 如果接口大面积增加新的方法,而不想去修改每一个实现类,那么就可以将新的方法,定义为带有方法体的默认方法
  3. 如果希望默认方法调用的更加简洁,可以将方法定义为静态方法直接使用接口名调用即可
  4. 如果默认方法中出现了重复代码,可以将重复代码抽取为一个私有方法,不允许实现类调用。

1.4 类和接口的关系

  • 类与类之间的关系:继承关系。只能是单继承,不能多继承。
  • 类与接口的关系:实现关系。可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口。当接口与父类有相同方法时,优先使用父类方法
  • 接口与接口的关系:继承关系,可以单继承,也可以多继承。(若多个父类有相同的方法声明,则必须重写父类方法)接口的实现类必须重写子接口和所有父接口的抽象方法。

2. 多态

多态即同一个对象,在不同时刻表现出不同的形态

多态的前提条件:

  1. 继承或者实现的关系存在
  2. 子类或者实现类有重写方法的存在
  3. 父类的引用指向子类的对象(通过父类引用在堆内存中可以找到子类的对象)

多态中成员访问的特点:

  • 成员变量:编译看父类,运行看父类(多态对象只能调用父类成员变量,不能修改)
  • 成员方法:编译看父类,运行看子类(多态对象调用方法时,编译看父类有无此方法,运行时使用子类重写的方法

多态的优缺点:

  • 优点:提高程序的扩展性。定义方法时候,使用父类型作为参数,可以接收所有子类类型。(方法返回值为父类,也可以返回各种子类类型)
  • 缺点:多态对象(子类)不能调用自己特有的方法,只能调用重写的父类方法。

多态中的转型:

  • 向上转型:父类引用指向子类对象就是向上转型(将子类对象赋值给父类引用,类似于自动类型提升)
  • 向下转型:子类型 对象名 = (子类型)父类引用(类似于强制类型转换)此用法易出现ClassCastException异常。
  • 关键字 instanceof:变量名 instanceof 类型   判断关键字左边的变量,是否是右边的类型,如果是则返回true。

3. 化信息管理系统

  • 若一个抽象类中方法全是抽象方法,可以将抽象类定义为一个接口。
  • 若想解除不同类之间的耦合性,可以将创建某个类对象的代码在另一个类中的方法中实现。
  • 定义方法时候,使用父类型作为参数,可以接收所有子类类型
  • 方法返回值为父类,也可以返回各种子类类型

(具体代码在我的资源中,信息管理系统 v4.0)

 

如有错误欢迎留言评论,及时更正。 羽露风  5月24日

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羽露风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值