zoukankan      html  css  js  c++  java
  • (七)类、超类和子类 ——(多态,动态绑定,final类,类型转换,抽象类)

    java中所有的继承都是公有继承

    在子类中的构造其内可以初始化超类的公有域,但不能初始化超类的私有域。

    因此需要在子类构造前的第一行使用super()语句初始化超类的私有域。

    如果超类没有不带参数的构造器,而子类没有显式的调用超类的其他构造器,则会出现编译错误。因为编译器无法调用超类的默认构造器。

    多态

    A为超类,B为子类。则A的变量既可以引用A类的对象,也可以引用B类的对象。

    动态绑定

    当调用x.f(param)时,若x为C类的对象。

    一:编译器列举C类中所有的名为f的方法和其超类中访问属性为public名为f的方法。

    二:根据参数类型查找匹配的参数对应的方法,此时获的需要调用的方法和参数类型

    三:如果是private方法,static方法,final方法,则编译器可以确定调用的时具体哪一个,这时称为静态绑定。与此对应的是,调用的方法依赖于调用对象的实际类型,并且在运行时动态绑定。

    比如:b.get(),如果b是A类型,则调用A的方法,如果b是B类型,则调用B的方法

    四:程序运行时,并且采用动态绑定调用方法时,虚拟机调用与x所引用对象的实际类型最合适的方法。

    比如:b.get(),如果B类没有该方法,则去B的超类查找。

    注意:如果B类有一个private的get()方法,尽管b.get()不能调用这个私有的get()方法,也不会取超类寻找。这是因为超类中的方法不能被子类的private方法覆盖,所以子类有一个private的get()方法,说明超类一定没有这个方法。

    因为Object有一个toString方法,因此任何类内都不能有private的toString()方法。

    阻止继承

    final修饰的类不能有子类,因而不能有方法被覆盖,所以其方法也都是final的。

    final修饰的方法不能被覆盖。

    强制类型转换

    1. 只能在继承层次内进行类型转换

    2. 在将超类转换成子类之前,应该使用instanceof进行检查

    抽象类

    抽象类不能被实例化。

    可以定义一个抽象类变量,它只能引用非抽象子类的对象。

    抽象类可以包含抽象方法,具体方法和具体数据,其中抽象方法的实现在子类中。

    如果子类实现了全部抽象方法,则子类便不是抽象的了。反之,子类也必须标记为抽象的。

    受保护访问

    private:仅对本类可见

    public:对所有类可见

    protected:对本包和子类可见

    无:对本包可见

  • 相关阅读:
    Redis和Memcache区别,优缺点对比
    C# 修改Config文件,增删查改
    SQL SERVER-时间戳(timestamp)与时间格式(datetime)互相转换
    post数据时报错:远程服务器返回错误: (400) 错误的请求。
    Win10 通过附加进程调试时出现“此任务要求应用程序具有提升的权限”
    谈谈技术原则,技术学习方法,代码阅读及其它
    C# 对象与JSON字符串互相转换的三种方式
    JSON.stringify 语法实例讲解
    前端Json对象与Json字符串互转(4种转换方式)
    Razor引擎学习:RenderBody,RenderPage和RenderSection
  • 原文地址:https://www.cnblogs.com/wuchaodzxx/p/5961069.html
Copyright © 2011-2022 走看看