zoukankan      html  css  js  c++  java
  • 面向对象之三

    一、方法覆写(必须在子类的覆写方法头上加上@Override来检测方法覆写是否成功

    1、方法覆写的原因

      当父类已存在的方法无法满足子类需求的时候,就覆写父类的此方法。

    2、方法覆写的原则

      ①子类的方法签名必须和父类的一致;

      ②子类的权限修饰符必须大于或者等于父类的权限修饰符(权限修饰符从小到大为:private<默认不写<protected<public);

      ③子类的返回值类型必须小于或者等于父类的返回值类型;

    3、父类的那些东西可以被子类覆写?

      ①非私有化的实例行为(实例的行为就是我们所谓的方法);

    二、Object类

      因为Object类是所有类的老祖宗,所以所有的对象(包括数组)都能调用Object类中的方法。

    1、Object类中常用的方法

      String toString() 返回调用此方法的当前对象的字符串表示形式(把当前对象转成字符串) ---返回的其实就是当前对象的内存地址

      boolean equals(Object obj) 比较两个对象是否相等(比较调用此方法的对象是否和传入的obj”相等”)---因为Object类中的equals方法的底层用的还是==来比较this和obj两个对象,因此比较的还是内存地址

      int hashCode() 把当前对象转成一个int值

    2、当我们使用toString方法时不想返回地址我们可以怎么做?

      覆写Object类的toString方法,实例如下:

      public String toString(){

        return "name = "+ name+ "  age = "+age;

      }

    3、当我们使用equals方法时不想比较的是内存地址我们应该怎样做?

      覆写Object类中的equals方法,实例如下:

      public boolean equals(Object obj) {

        if(obj instanceof Person){

          Person s= (Person)obj;

        return (this.name.equals(s.getName()) &&this.age == s.getAge());

        }

              return false;

       }

    4、==equals方法的区别

      ①==比较基本数据类型时比较的是书面值,比较引用数据类型是比较的是内存地址;

      ②equals方法不能比较基本数据类型,只能比较引用数据类型,在今后的开发中我们只使用equals方法来进行比较引用数据类型,当我们不想比较内存地址时就覆写Object类中的equals方法。

    三、访问权限修饰符

      主要控制类以及类中成员的访问权限

    1、访问权限修饰符顺序

      private < 默认不写 < protected < public     在今后的开发中,一般的规律是所有的类和方法都用public修饰,所有的字段都是用private修饰。

      访问范围:private   只能在当前类中访问;

        默认不写:只能在当前类、同包中访问

        Protected:只能在当前类、同包、不同包但是两者是继承关系的类中进行   访问;

        Public:任意地方都能访问

      ① 外部类 只能够使用public 或者 默认不写;(一般都是public);

      ② 类中的成员(字段(private),构造方法,方法(public))以及内部类是可以使用任何修饰符修饰的;

      ③局部变量不能使用权限修饰符修饰。

    2、访问方式与访问权限

      访问方式(调用方式) 访问权限 不是同一个东西;

      访问方式:

    1. .方法名/字段   前提  方法名/字段是被static所修饰的
    2. 对象名.方法名/字段 前提 方法/字段没有被static所修饰
    3. 直接使用字段/方法  前提 调用方和被调用方要在同一个类中,要么都被    static所修饰,要么都没有被static所修饰

      访问权限:

      Private 默认不写  protected    public

    四、Super

    1、super指的是父类的对象

    2、每一个类中都有一个隐式的无参数构造方法,如果有了显示的,那么隐式的就自动不存在了;每一个构造方法中都有一个隐式无参的super方法,当有了显示的this...)和super...)之后,隐式的无参super方法就不存在了。This...)和super...)都只是调用构造方法,不会创建对象!

    3、this...)和super...)调用构造方法的时候不能同时存在,因为必须要位于第一行,普通方法里不能使用this...)和super...)调用构造方法

    4、thissuper调用普通方法和字段的格式时this.move()/字段,super.move()/字段,这个时候两个可以同时存在。

    五、System.out.println

    System.out.println()和以下是等价的。

    Java.io.Printstream p = System.out;

    p.println()

  • 相关阅读:
    微信小程序通过getPhoneNumber后台PHP解密获取用户手机号码
    设置API:wx.openSetting,wx.getSetting使用说明(示例:地图授权与取消授权后的重新授权)
    微信小程序之上传图片和图片预览
    微信小程序上传图片(前端+PHP后端)
    微信小程序拒绝授权后重新拉起授权窗口
    微信小程序如何使用 Git 实现版本管理和协作开发
    配置同时使用 Gitlab、Github、Gitee(码云) 共存的开发环境
    linux 系统下Anaconda的安装【安装python3.6环境首选】
    利用phpqrcode二维码生成类库合成带logo的二维码并且用合成的二维码生成海报(二)
    利用phpqrcode二维码生成类库和imagecopymerge函数制拼接图片的经验(一)
  • 原文地址:https://www.cnblogs.com/limengkun/p/10609867.html
Copyright © 2011-2022 走看看