zoukankan      html  css  js  c++  java
  • java基础之接口和多态

        接口和多态

    1.接口的概述:
    描述的是事物的一种扩展行为

    定义接口的格式:
    使用关键字 interface, 将定义类中的class换成interface即可
    public interface 接口名{
    // 成员变量(常量)如果是常量,一般习惯写成大写

    // 成员方法(抽象方法)
    }


    接口中的成员特点:
    成员变量: 默认被public static final修饰了,不管写不写都有
    成员方法: 默认被public abstract 修饰了, 不管写不写都有

    如何使用接口?
    特点: 接口不能被new,不能被实例化
    接口的使用方式, 研究类和接口之间的关系:
    接口与类之间是实现关系, 使用关键字 implements
    格式: public class 类A implements 接口名A{
    覆盖接口中的所有抽象方法, 除非这个类也是抽象类.
    }

    1> 一个类实现一个接口
    格式: public class 类A implements 接口A{....}

    2> 一个类实现多个接口
    格式: public class 类A implements 接口A, 接口B{....}

    3> 一个类继承另外一个类, 实现多个接口
    格式: public class 类A extends 类B implements 接口A,接口B{...}

    福利:
    面试题一:
    interface InterA{
    void method();
    }

    interface InterB{
    void method();
    }

    class MyClass implements InterA, InterB{
    // 这里需要实现几个方法? 实现一个即可.
    public void method(){
    }
    }

    面试题二:
    interface InterA{
    void method();
    }

    class Fu{
    public void method(){}
    }

    class Zi extends Fu implements InterA{
    // 需要实现方法吗? 答: 不需要实现方法了, 因为已经从父类中继承过来了对应的method方法
    }


    2. 多态: 体现的是事物的多种状态 (强调的是事物的行为)
    多态的表现形式
    1> 必须要有继承关系, 一般会伴随着方法重写.
    2> 父类的引用指向子类的对象.
    格式:
    父类类型(抽象类) 变量名 = new 子类类型();
    接口 接口名 = new 实现类();

    使用:
    父类的引用.方法名();
    编译的时候看父类, 运行的时候看子类;
    如果父类没有就编译报错

    3. 多态的好处:

    接口的多态表现形式:
    1> 需要有实现关系;
    2> 接口变量类型指向实现类对象;

    代码格式:
    接口 接口名 = 实现类对象;

    多态的四种使用形式:
    1> 类(抽象类)作为方法的参数传递, 传递的是该类的子类对象
    2> 类(抽象类)作为方法的返回值, 返回的是该类的子类对象
    3> 接口作为方法的参数, 传递的是实现类对象
    4> 接口作为方法的返回值, 返回的是实现类对象.

    在多态的格式下面,使用内容的特点:
    成员方法:
    编译看左边, 运行看右边;

    成员变量:
    编译看左边, 运行看左边

    多态的好处:
    1> 可以作为方法的参数进行传递,无限扩展子类
    2> 可以作为方法的返回值.

    4. 缺点: 不能调用子类特有的方法, 因为编译看左边,运行看右边

    如何调用子类特有方法:
    向上转型: 小的数据类型转换成大的数据类型(多态体现)
    向下转型: 大的类型转换成小的类型, 但是有风险

    如果解决向下转型的风险:
    需要使用到关键字 instanceof; 判断该引用是否是该类的实例对象.
    使用格式: 引用类型 instanceof 类名称;// 返回值类型是一个boolean类型

  • 相关阅读:
    《深度探索C++对象模型》1
    《C++标准库》
    关于多级分类的封装
    git常用命令
    使用BigDecimal进行精确运算
    关于强制装换
    page分页
    pageContext.request.contextPath 和 request.getContextPath()
    springMVC + mybatis 搜索 分页等
    mybatis 动态sql
  • 原文地址:https://www.cnblogs.com/youyouxiaosheng-lh/p/8094468.html
Copyright © 2011-2022 走看看