zoukankan      html  css  js  c++  java
  • 继承与多态

    一、继承
    格式:通过extends关键字可以实现类与类的继承
    class 子类类名 extends 父类类名{ }
    缺点:耦合性提高,让类与类之间产生了关系,容易牵一发动全身
    继承要慎用,降低了扩展性和维护性
    什么时候使用继承?
    1.一般在编写代码的时候出现了重复代码,我们可以将重复代码向上抽取成为一个父类的baseacitvity basedao
    2.当某个类的设计非常复杂的时候,可以使用继承
    3.让类与类产生了关系,这是多态的必要条件
    继承的注意事项:
    1.单一继承性 2.支持多层继承class C extends B { }class B extends A{ }
    3.父类成员使用private修饰,理解为不能继承,所以父类成员一般都会用public 或者 protected修饰
    4.如果一个子类继承了父亲的属性和方法,同时还可以有自己的方法
    5.当子类成员和父亲成员重名的时候,子类优先
    6.子类不能够继承父类的构造方法,但是子类可以访问父类的构造方法
    super关键字
    this和super的区别:
    this可以理解为当前对象,谁调用this就代指那个调用者对象,每次创建一个对象,默认都会创建一个this变量指向同一个堆区空间
    super本质是父类存储空间的标识,但是你可以理解为父类对象,那么同样可以使用super这个关键字来访问父类的成员
    注意:
    1.任何一个类的无参或者带参构造方法的第一句都默认省略super();
    2.任何一个类都直接或者间接继承自object类
    3.设计object类,满足了万事万物皆对象的原则
    访问根类object的无参构造意义何在?--加载object类中静态成员和静态代码块
    4.创建一个子类对象默认会去调用父类的构造方法,那么有没有在创建子类对象的同时也创建了父类对象呢?
    ----没有创建父类对象,本质就相当于访问了一个普通方法,创建对象开启空间需要new关键字
    5.super访问父亲带参构造方法的意义?--帮助子类初始化父类继承下来的成员,简化编程
    6.静态环境/静态上下文(static修饰的方法),不能够出现this和super
    7.super必须出现在构造方法的第一句,this和super不能共存

    访问权限修饰符:public >protected> default> private
    1.public对一切类可见
    2.protected对同包下和不同包的子类可见
    3.default仅对同包下可见
    4.private仅对本类可见
    访问权限修饰符可以修饰成员变量,成员方法,还可以修饰类(只有public可以)
    在这里需要注意,其实protected/private也可以修饰类,但必须是内部类
    方法重写特点:
    1.发生在具有子父类的两个类中 2.方法名相同3.参数列表完全相同4.返回值类型可以相同或者是其子类5.访问权限修饰符不能够严于父类
    private修饰的方法不能够被继承,所以不能够被重写
    注意事项:
    1.父类中私有方法不能被重写
    2.构造方法不能被重写
    3.子类重写父类方法时,访问权限不能更低
    4.重载和重写的比较(二者是完全不同的两个概念毫无关系)

    final
    修饰变量成为常量,不能够被二次赋值
    局部变量
    可以暂时不给出初始值
    成员变量
    在声明的时候必须给出初始值
    修饰方法不能够被子类重写
    修饰类不能够被子类继承 string类是final修饰的

    二、多态
    概述:同一个方法在不同的类下体现出来的不同的实现(java)
    父类引用指向子类对象 (内存)
    多态的必要条件:
    1.必须存在继承关系
    2.必须存在方法重写
    3.必须存在父类引用指向子类对象
    利用多态访问成员的特点:
    成员变量
    编译时期看左边类型,运行时期看左边类型
    成员方法
    编译时期看左边类型,运行时期看右边类型
    构造方法
    先访问父类的构造方法,帮助子类初始化父类继承过来的成员
    静态方法
    编译时期看左边类型,运行时期看左边类型
    多态的缺点:父类引用无法访问子类所特有的方法
    解决办法:向下转型
    格式:<父类型> <引用变量名>=new <子类型>();(向上转型,自动转换)
    <子类型> <引用变量名>=(<子类型>) <父类型的引用变量>;(向上转型,自动转换)
    instanceof关键字:测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据
    记住:instanceof通常和向下转型结合使用

  • 相关阅读:
    linux g++编译dxf文件C++解析库dxflib
    linux g++使用总结
    一个使用three.js的网页DXF文件查看器dxf viewer
    node.js教程基础:node.js访问操作系统
    node.js教程基础:node.js全局对象
    node.js教程基础:node.js命令行选项
    node.js教程基础:node.js包管理器
    node.js教程基础:node.js REPL
    node.js教程基础:第一个node.js程序
    node.js教程基础:node.js安装
  • 原文地址:https://www.cnblogs.com/yhgn/p/10771099.html
Copyright © 2011-2022 走看看