• 22天学习java基础笔记之day09


    Day09 接口 多态 instanceof

    一、接口

    1、概述

            接口是特殊的抽象类,所有的属性都是公开静态常量(全局常量),所有的方法都是公开抽象方法而且没有构造方法

    2(思想)特点

                    **接口是对外暴露的规则。

            **接口是程序的功能扩展。

            **接口的出现降低耦合性。

            **接口可以用来多实现。

    类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。接口与接口之间可以有继承关系。

    3、接口的使用

            类实现接口的时候,要么全部实现接口中的方法,要么类本身定义为抽象类。接口不能被实例化,所有成员有固定修饰符。

    注意:

            *如果接口默认的方法是public和abstract,可以省略不写,但是类在实现接口时,不可省public

            *如果接口的返回值不是void,那么类实现该接口时,方法体中必须有return语句;

            *如果接口的返回值是void,大括号内可以没有语句。

            *如果父类实现了某个接口,子类也自然实现了该接口。

    4、接口和抽象类的区别--------都是不断向上抽取出来的

            A:抽象类只能单继承,接口可以多实现。

            B:抽象类中可以由非抽象方法。抽象类中可以定义变量和常量。接口中的方法都是抽象的。接口中只能有静态常量。因为接口中的方法都有默认修饰符:public abstract;接口中的成员变量都有默认修饰符:public static final

            C:抽象类中定义的是一个体系的共性功能。接口中通常定义的对象中的扩展功能。

            D:接口的出现避免了单继承的局限性。

            E:抽象类被继承表示的是:is a 的关系。叫做:xx是yy的一种。 接口被实现表示的是:like a 的关系。叫做:xx像yy一种。

    5、举例

            学会分析什么时候使用抽象类,什么时候使用接口。

            他们代表两种不同的设计思想。

    二、多态

    1、概述

            事物的多种形态。它分为静态多态(重载)和动态多态(对象的多态)

    2、特点

    体现:多态用在方法的参数上m(A a)可以用A的任何一个子类对象作为参数。

              多态用在方法的返回值上A m() m方法返回的可能是A的子类对象。

    父类引用或者接口引用执行子类的对象。

    前提:    A:类与类(接口)之间有继承(实现)关系。

                            B:必须有重写。

                            C:父类引用指向子类对象。

    多态的成员特点:

            A:成员变量

                    编译看左边,运行也看左边。

    编译--参考的是引用类型变量所属的类中是否有调用的成员变量,如果有,编译通过,         如果没有,编译失败。

    运行--调用的也是引用类型变量所属类中的成员变量。                                     

            B:成员方法-------依赖于对象

                    编译看左边,运行看右边。

    编译--参考的是引用类型变量所属的类中是否有调用的方法,如果有,编译通过,                如果没有,编译失败。

    运行--调用的是对象所属类中是否有调用的方法,如果有,运行子类自己的方法;如果没有就调用父类的方法。      

    函数有一个覆盖的特性。     

            C:静态方法------不依赖于对象

                    编译看左边,运行也看左边。   

    编译--参考的是引用类型变量所属的类中是否有该方法,如果有,编译通过,如果没有,编译失败。

    运行--调用的也是引用类型变量所属类中的方法。                                             

    3、好处

            提高了代码扩展性,便于后期可维护性。把不同的子类对象都看成是父类的对象,屏蔽子类差异,使得程序更加通用。

    4、弊端

            只能使用子类中和父类中同名的方法。对于子类特有的方法使用不了。

    5、思想

            多态可以指挥同种类型一批对象做事情。使我们复杂的问题简单化了。

            带士兵打仗,下课吃饭。

    6、转型向上转型,向下转型   

    对程序进行扩展,或者限定对对象的方法操作时,使用向上转型。当要使用子类的特有方法时,需要向下转型(要做健壮性的判断)

            向上转型和向下转型需要注意的问题。进去是什么,出来还得是什么。

                    Animal a = new  Dog();  向上转型  -------把Dog提升为Animal。

                    a.eat();  向下转型 --------调用的是Dog的方法。

    ClassCastException:在进行子类特有方法使用时,要进行向下转型,转型前一定要做判断,否则容易发生次异常。增强程序的健壮性!

    三、instanceof关键字

            它是一个比较运算符,返回值类型为boolean。

            对引用作强制类型转换,可以用instanceof判断是否兼容,从而避免类型转换异常。

                            if( a instanceof Dog){

                                    Dog b = (Dog) a;

                                    a.shout();

                            }

  • 相关阅读:
    Docker手动搭建sentry错误日志系统
    Flask源码解析:Flask应用执行流程及原理
    django Rest Framework---缓存通过drf-extensions扩展来实现
    Python实现 -- 冒泡排序、选择排序、插入排序
    Python查找算法之 -- 列表查找和二分查找
    java设计模式之单例模式
    中文乱码解决方案
    web应用中Filter过滤器之开发应用
    web应用中的Filter过滤器之基础概述
    会话跟踪技术
  • 原文地址:https://www.cnblogs.com/aohongzhu/p/12938755.html
Copyright © 2020-2023  润新知