java进阶三

JavaSE进阶第三天

课程大纲:

  • 接口
  • 多态

一.接口

1.什么是接口

  现实世界的接口:USB接口、插排
  Java中的接口
    使用interface定义的特殊的类,比抽象类更加抽象,
    因为接口中的所有方法都是抽象方法(JDK8之前)。

2.接口的好处

2.1定义规则
2.2提高拓展性

3.接口的格式

3.1定义格式
public interface 接口名 {

}
接口名和类名的命名规范一致,遵循大驼峰式命名
3.2使用格式
 方式一:
 public class 实现类 implements 接口 {


 }

方式二:
    public interface 子接口 extends 父接口 {

}

4.接口的特点

 1、接口不能创建对象(不能实例化)
 2、一个类去实现接口的时候必须实现其中所有的抽象方法,要么该类要变成抽象类

5.接口的成员特点

5.1成员变量
 成员变量:没有
 常量:可以有
 有默认修饰符,public static final

image-20210817094509648

5.2 成员方法
 非抽象方法:不能有   (JDK8之前)
 抽象方法:可以有
 有默认修饰符,public abstract
 构造方法   没有

image-20210817095110512

6.抽象类的成员的特点

6.1 成员变量
  成员变量:可以有
  常量:可以有
6.2 成员方法
抽象方法:可以有
非抽象方法:可以有
6.3 构造方法
一定有

image-20210817100013920

二.接口的新特性

这些新特性针对的都是接口中的方法的,而且这些方法都是非抽象的方法。

1. JDK8的新特性

1.1 默认方法
1.1.1 格式
public default 返回值类型 方法名(参数列表){
        方法体;
}
注意:
public可以省略,如果显式写出只能用public权限修饰符default必须要有.
1.1.2 特点
 1、可以被实现类所继承
 2、默认方法不要求强制重写,但是也可以进行重写
 实现类在重写的时候,权限修饰符必须是public,同时要去掉default
1.1.3 应用场景
 利于接口的功能的扩展,如果定义成抽象方法,所有的实现类都必须
 重写这些方法,所有的实现类都要进行修改,如果定义成默认方法之后
就可以将实现的功能定义在接口,而实现类继承这个默认方法的功能即可,
 不要要求实现类去进行强制重写。
1.2 静态方法
1.2.1 格式
 public static 返回值类型 方法名(参数列表){
        方法体;
}
注意:
public可以省略,如果显式写出只能用public权限修饰符,static必须要有

image-20210817101958371

1.2.2 特点
只能通过接口名去调用这个方法,实现类无法使用该方法

image-20210817102102257

1.2.3 应用场景
利于接口的扩展,如果这个方法不想给实现类使用,那么就可以定义为静态方法

2. JDK9的新特性

2.1 私有方法
2.1.1 格式
private 返回值类型 方法名(参数列表){
      方法体; 
}

private static 返回值类型 方法名(参数列表){
      方法体;
}

image-20210817112943322

image-20210817113119636

image-20210817113132371

2.1.2 注意
权限修饰符必须是private,而且不能省略
    私有的默认的方法,default要去掉
    私有的静态的方法,static必须加上
2.1.3 特点
 只能在当前接口中使用,出了接口无法使用
2.1.4 应用场景
抽取接口中的默认方法和静态方法的共性代码,而抽取到方法中的这些共性代码又不希望外类进行使用

三. 类和接口的关系

类和类的关系:继承关系(extends),单继承,不支持多继承,支持多层继承
类和接口的关系:实现关系(implements),支持单实现、支持多实现,还支持多层实现
class InterImpl implements InterA {}        // 单实现
class InterImpl implements InterA,InterB{}  // 多实现

class InterImpl implements InterA{}         // 多层实现
interface InterA extends InterB{}

接口和接口的关系:继承关系(extends),支持单继承、多继承和多层继承
 interface InterA extends InterB {}          // 单继承
interface InterA extends InterB,InterC {}   // 多继承

interface InterA extends InterB {}          // 多层继承
interface InterB extends InterC {}
interface InterC {}


 一个类可以在继承的同时有实现关系。
class InterImpl extends Fu implements InterA,InterB,InterC{}

四.类和接口的面试题

  面试题:Java是否支持多继承?
      Java中的类不支持多继承
      Java中的接口支持多继承
      
      
  面试题:抽象类和接口的区别?
      1、定义上的区别
      抽象类是abstract class定义的
      接口是interface定义的

      2、成员上的区别
      抽象类:
      有构造方法,可以定义成员变量和常量
      可以定义抽象方法和非抽象方法

      抽象类中的常量没有默认修饰符,定义的时候必须加上final进行修饰
      抽象类中的抽象方法没有默认修饰符,定义的是必须加上abstract进行修饰

      接口:
      没有构造方法,不能定义成员变量,可以定义常量
      JDK8之前不能定义非抽象方法,只能定义抽象方法
      JDK8之后也可以定义三种固定格式的非抽象方法

      接口中的常量有默认修饰符:public static final
      接口中的抽象方法有默认修饰符:public abstract

      3、和类的关系的区别
      抽象类和类之后是继承关系,支持单继承、不支持多继承,支持多层继承
      接口和类之间的关系,是实现关系,支持单实现、支持多实现,支持多层实现

五.多态

5.1什么是多态

 是面向对象的三大特征(封装、继承和多态)之一
     

 多态:
 一个事物表现出来的多种形态
 在Java中,多态表示一个对象表现出来的多态形态,
 一个对象可以用当前类型进行接收,也可以使用父类类型进行接收
 白居易曰:横看成岭侧成峰,远近高低各不同

5.2 多态的前提

    1、有继承或者实现关系
    2、一般会有方法重写
    3、父类的引用指向子类的对象
    Animal a = new Cat();
接口的引用指向实现类的对象
    Inter i = new InterImpl();

5.3多态下成员访问的特点

        成员变量:编译看左边(父类),运行看左边(父类)
        成员方法:编译看左边(父类),运行看右边(子类)
        静态方法:编译看左边(父类),运行看左边(父类)
            
 总结:编译都看左边(父类),运行除了成员方法看右边之外,其余都看左边

5.4多态的好处和弊端

 好处:提高了代码的扩展性
 弊端:无法使用子类特有的成员

5.5 多态下的引用类型的转型

向上转型:小类型(子类)自动转为大类型(父类)
                 父类的引用指向子类的对象
                 Animal a = new Cat();

向下转型:大类型(父类)转为小类型(子类),要强制转换
    目标数据类型 变量名 = (目标数据类型);
int i = 10;
byte b = (byte)i;

Cat c = (Cat)a;
向下转型可能出现的问题
    问题
    ClassCastException:类型转换出错问题

    问题出现的原因
    向下转型的时候大类型中记录的对象本质的类型和你要转换的类型不一致

    解决办法
    加入类型判断,是这种类型再转为这种类型,否则不转换

    instanceof关键字,运算符

    格式:
    boolean flag = 对象() instanceof 类(型);

判断某个对象(名)是否是指定的类型

    注意:
    instanceof前面的对象(名)对应的类型
    与
    instanceof前面类(类型)必须要有子父类关系,或者是相同类型
    否则编译都会报错


Cat c = (Cat)a;




````java
向下转型可能出现的问题
    问题
    ClassCastException:类型转换出错问题

    问题出现的原因
    向下转型的时候大类型中记录的对象本质的类型和你要转换的类型不一致

    解决办法
    加入类型判断,是这种类型再转为这种类型,否则不转换

    instanceof关键字,运算符

    格式:
    boolean flag = 对象(名) instanceof 类(型);

判断某个对象(名)是否是指定的类型

    注意:
    instanceof前面的对象(名)对应的类型
    与
    instanceof前面类(类型)必须要有子父类关系,或者是相同类型
    否则编译都会报错


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值