JavaSE进阶_03_接口&多态

JavaSE进阶_03_接口&多态今日内容​ 接口【重点】​ 多态【重点】接口【重点】什么是接口当一个类中的所有的方法都是抽象方法的时候,这个类就可以定义成接口接口其实是特殊的类,比抽象类更加抽象接口是使用interface关键字定义的特殊的类接口的好处1、定义了规则:接口中的抽象方法可以认为是一种规则2、利于扩展接口的定义格式publicinterface接口名{}接口的特点1、接口不能实例化

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

今日内容

​ 接口 【重点】
​ 多态 【重点】

接口 【重点】

什么是接口
    当一个类中的所有的方法都是抽象方法的时候,这个类就可以定义成接口
    接口其实是特殊的类,比抽象类更加抽象
    接口是使用interface关键字定义的特殊的类

接口的好处
    1、定义了规则:接口中的抽象方法可以认为是一种规则
    2、利于扩展

接口的定义格式
    public interface 接口名{}

接口的特点
    1、接口不能实例化
    2、类和接口的关系,是类实现(implements)接口
        public class 类 implements 接口{}
    3、类实现接口,要么实现其中所有抽象方法,要么该类也变成抽象类
    4、一个类可以实现多个接口,多个之间使用逗号隔开
    5、一个类在继承一个类的同时,还可以实现多个接口
        public class Dog extends Animal implements InterA,InterB {
        }
    6、接口和接口之间的关系是继承,而且支持多继承(一个接口可以继承多个接口)
        public interface InterA extends InterB,InterC{}

接口成员的特点
    成员变量
        变量:没有
        常量:可以有
        即使定义一个变量,其实默认也是常量,会有默认的修饰符:public static final修饰

    构造方法
        没有

    成员方法
        抽象方法:可以有
        非抽象方法:不可以

        JDK8和9版本前

        抽象方法:使用abstract修饰的,没有方法体的方法
JDK8和9版接口的新特性
    新特性是可以有非抽象方法的,但是必须是以下几种:
        默认方法
        静态方法
        私有方法


    默认方法
        格式:
            public default 返回值类型 方法名(参数列表){
                方法体;
            }

            注意:public可以省略,但是写出来必须是public
                    default必须加上
                    默认方法只能定义在接口中,不要定义在类中
        特点:
            默认方法不是抽象方法,所以不强制被重写。但是可以被重写,重写的时候去掉default关键字
            如果实现了多个接口,多个接口中存在相同的方法声明,子类就必须对该方法进行重写

    静态方法
        格式:
            public static 返回值类型 方法名(参数列表){
                方法体;
            }
            注意:public可以省略,但是写出来必须是public
                 static必须加上

        特点:
            静态方法只能通过接口名调用,不能通过实现类名或者对象名调用。

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

         特点:
            私有方法用于抽取接口的默认方法的共性内容
            私有静态方法用于抽取接口的静态方法的共性内容
面试题:抽象类和接口的区别
    1、定义的格式不同
        抽象类:abstract class 修饰的类
        接口: interface
    2、成员不同
        抽象类:
            有构造方法
            可以有变量和常量
            可以有抽象方法,也可以有非抽象方法
        接口:
            没有构造方法
            只能有常量不能有变量,常量是有默认修饰符public static final
            只能有抽象方法,不能有非抽象方法(JDK8之前)
            JDK8之后也可以有非抽象方法了,这些抽象方法只能默认的、静态的或者私有的
    3、和类关系不同
        抽象类是类,和类之间的关系是继承关系(extends),单继承,也可以多层继承,但是不能多继承

多态 【重点】

什么是多态
        是一个对象表现出来的多种形式
        多态是面向对象的三大特征之一
        
  	面试题:
        横看成岭侧成峰,远近高低各不同
        描述的是Java中的三大特征中的哪一种?

多态的前提
    要有继承或实现关系
    要有方法的重写
    要有父类引用指向子类对象

多态下成员的访问特点
    成员变量:编译看左边(父类),运行看左边(父类)
    成员方法:编译看左边(父类),运行看右边(子类)
    注意:
        如果是静态的成员方法:编译看左边(父类),运行看左边(父类)

    总结:编译都看左边,运行除了非静态的成员方法看右边之外,其他都看左边。

好处和弊端
    好处
        提高程序的扩展性。
        定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型参与操作
    弊端
        不能使用子类的特有成员

多态的转型
    基础班学习过转型,基本类型之间的转换
    就业班这里学习的转换,引用类型之间的转换

    向上转型:类似于隐式转换(自动转换),将子类类型转换父类类型
        Fu f = new Zi();
    向下转型:类似于强制转换,将父类类型转换为子类类型
            目标数据类型 对象名 = (目标数据类型)值;
            Zi z = (Zi) f;

类型转换异常(ClassCastException)
     出现的原因:
       如果被转的引用类型变量,对应的实际类型和目标类型不是同一种类型,那么在转换的时候就会出现ClassCastException

     解决方案
        instanceof关键字/运算符进行判断
        
        格式:
        		boolean 变量名 = 对象名 instanceof 类;
        		比如: a instanceof Dog
    			注意:instanceof左右两边的类型必须有子父类关系,如果是完全无关的两个类,那么编译都报错
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196651.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 初始化任务Bootstrapper

    初始化任务Bootstrapper每个应用程序都需要在启动的时候做些初始化任务,在退出的时候做些清理工作,这类任务被归为Bootstrapper,在codeplex上的开源项目,详见http://bootstrapper.codeplex.com/帮助我们来完成以下的任务。1、在需要的时候,我们可以把实现和接口进行分离,实现使用依赖注入(不一定要项目引用,只需要文件夹下有实现的DLL…

    2022年7月20日
    11
  • ehcache缓存原理_实现lru缓存

    ehcache缓存原理_实现lru缓存运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久

    2022年8月8日
    2
  • Git:代码冲突常见解决方法[通俗易懂]

    Git:代码冲突常见解决方法[通俗易懂]Git:代码冲突常见解决方法

    2022年4月24日
    47
  • YII2安装中遇到的错误解决Calling unknown method: yii\web\UrlManager::addRules()

    YII2安装中遇到的错误解决Calling unknown method: yii\web\UrlManager::addRules()

    2022年2月3日
    34
  • CreateMutex WaitForSingleObject ReleaseMutex使用「建议收藏」

    CreateMutex WaitForSingleObject ReleaseMutex使用「建议收藏」HANDLECreateMutex( LPSECURITY_ATTRIBUTESlpMutexAttributes,// BOOLbInitialOwner, //flagforinitialownership LPCTSTRlpName    //pointertomutex-objectname );

    2022年6月26日
    25
  • 【转】分区容错性「建议收藏」

    【转】分区容错性「建议收藏」http://book.51cto.com/art/201203/323908.htm1.6.3  分区容错性最为常见的系统部署方案之一就是在一台巨大的中央服务器上安装一个数据库供其他东西访问。这可以让你的系统具有一致性,但是扩展性又如何呢?分区容错性能让你的系统在部分断网的情况下仍然可以完全正常地运转。要实现完全分区容错,系统就必须在任何情况下都能正常运转,除非完全断网。分区容错性几乎…

    2022年7月25日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号