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通常和向下转型结合使用

  • 相关阅读:
    LeetCode 769. Max Chunks To Make Sorted
    LeetCode 845. Longest Mountain in Array
    LeetCode 1059. All Paths from Source Lead to Destination
    1129. Shortest Path with Alternating Colors
    LeetCode 785. Is Graph Bipartite?
    LeetCode 802. Find Eventual Safe States
    LeetCode 1043. Partition Array for Maximum Sum
    LeetCode 841. Keys and Rooms
    LeetCode 1061. Lexicographically Smallest Equivalent String
    LeetCode 1102. Path With Maximum Minimum Value
  • 原文地址:https://www.cnblogs.com/yhgn/p/10771099.html
Copyright © 2011-2022 走看看