zoukankan      html  css  js  c++  java
  • 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();

                            }

  • 相关阅读:
    Palindrome Partitioning
    Minimum Path Sum
    Maximum Depth of Binary Tree
    Minimum Depth of Binary Tree
    Unique Binary Search Trees II
    Unique Binary Search Trees
    Merge Intervals
    Merge Sorted Array
    Unique Paths II
    C++ Primer Plus 笔记第九章
  • 原文地址:https://www.cnblogs.com/aohongzhu/p/12938755.html
Copyright © 2011-2022 走看看