• 我的学习之路_第二章_接口/多态


    接口
    (1)当抽象类中的方法都是抽象的时候,java就提供了一种新的表现形式:接口。接口是功能的集合 接口不能创建对象
    (2)格式:
    父接口:
    public interface Inter
    {

    }

    子类:
    public class InterImpl implements Inter
    {

    }
    (3)接口的特点:
    A:不需要被abstract修饰。
    B:类实现接口,可以单实现,还可以多实现。
    C:接口可以继承接口,可以单继承,也可以多继承。
    D:接口与父类的功能可以重复,均代表要具备某种功能。
    (4)抽象类和接口的区别:
    A:成员的区别
    抽象类:
    成员变量:可以是变量,也可以是常量。
    构造方法:有构造方法,用于子类实例化使用。
    成员方法:可以是抽象的,也可以是非抽象的。

    接口:
    成员变量:只能是常量。
    默认修饰符:public static final
    成员方法:只能是抽象的。
    默认修饰符:public abstract

    推荐:默认修饰符请自己永远手动给出。

    B:类和接口的关系区别
    类与类:
    继承关系,只能单继承。可以多层继承。

    类与接口:
    实现关系,可以单实现,也可以多实现。
    类还可以在继承一个类的同时实现多个接口。

    接口与接口:
    继承关系,可以单继承,也可以多继承。

    C:体现的理念不同
    抽象类里面定义的都是一个继承体系中的共性内容。

    接口是功能的集合,是一个体系额外的功能,是暴露出来的规则。

    多态
    (1)同一个对象,在不同时刻表现出来的不同状态。
    举例:水(水,冰,水蒸气)
    猫(猫,动物)

    (2)前提:
    A:有继承或者实现关系。
    B:有方法的重写。
    C:有父类(接口)的引用指向子类对象。
    (3)多态中的成员使用特点:
    Fu fz = new Zi();
    多态时,所有表现形式都是父类的表现形式,
    只有调用方法时,运行的是子类重写的方法
    A:成员变量
    编译看左边,运行看左边。
    B:成员方法
    编译看左边,运行看右边。

    class Fu {
    int num=4;
    void show() {
    System.out.println("showFu");
    }
    }
    class Zi extends Fu {
    int num=5;
    void show() {
    System.out.println("showZi");
    }
    }
    class T {
    public static void main(String[] args) {
    Fu f=new Zi();
    System.out.println(f.num);
    f.show();

    }

    (4)多态中的转型:
    A:向上转型
    把子类对象赋值给父类(接口)的引用 自动类型提升 int a = 0; double b =a;

    Fu fz = new Zi();
    B:向下转型
    把父类(接口)的引用强制转换成子类对象
    double b = 10.0;
    int a = (int)b;

    Fu fz = new Zi();
    Zi zf = (Zi)fz;

    注意:Fu fu = new Fu() 不能向下转型 会报ClassCastException 类型转换异常


    (5)多态的好处及弊端:
    A:好处
    提高了程序可维护下和可扩展性。

    B:弊端
    不能使用子类特有内容。
    要想使用,要么向下转型,要么重新创建子类对象。
    (6)多态的三种形式:
    A:具体的类多态 父类 变量名 = new 子类();
    B:抽象类多态 父抽象类 变量名 = new 子类();
    C:接口多态 接口 变量名 = new 实现类();
    instanceof 关键字
    格式: 对象名 instanceof 类名
    返回值: true, false
    作用: 判断指定的对象 是否为 给定类创建的对象

    Animal a1 = new Cat();

    Animal a2 = new Dog();

    method(a1)


    public static void method(Animal a){
    if(a instanceof Cat){
    向下转型
    调用猫特有方法
    }

    }


  • 相关阅读:
    Web 3D是否需要WebAssembly?
    # Python设计模式 单例模式
    学写PEP,参与Python语言的设计
    Github仓库如何选择开源许可证
    程序猿的产品思考:2C与2B产品思维的区别
    vue-如何实现带参数跳转页面
    基于Redis在定时任务里判断其他定时任务是否已经正常执行完的方案
    IDEA创建SpringBoot的多模块项目教程
    如何优雅地使用Mybatis逆向工程生成类
    Activiti工作流框架学习笔记(二)之springboot2.0整合工作流Activiti6.0
  • 原文地址:https://www.cnblogs.com/jia-/p/6937582.html
Copyright © 2020-2023  润新知