面向对象之三

Posted limengkun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象之三相关的知识,希望对你有一定的参考价值。

一、方法覆写(必须在子类的覆写方法头上加上@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()

以上是关于面向对象之三的主要内容,如果未能解决你的问题,请参考以下文章

多 态★★★★★(面向对象特征之三)

面向对象之三

Java面向对象一(封装 继承 多态 类 对象 方法)

PLC编程再思考之三:面向过程

Java基础第十天总结——面向对象(上)

python面向对象(多态)