2018-09-24==与equals_并重写了equlas、s

2018-09-24  本文已影响0人  消失的七月

1.==与equals_并重写了equlas

“==”代表比较双方是否相同。如果是基本类型则表示值相等,如果是引用类型则表示地址相等即是同一个对象。

 “”equals”是Object类中定义有:public boolean equals(Object obj)方法,提供定义“对象内容相等”的逻辑。比如,我们在公安系统中认为id相同的人就是同一个人、学籍系统中认为学号相同的人就是同一个人。【也就是可以重写equals方法指定id相等】

public class TestEquals { 

    public static void main(String[] args) {

        Person p1 = new Person(123,"高淇");

        Person p2 = new Person(123,"高小七");     

        System.out.println(p1==p2);     //false,不是同一个对象

        System.out.println(p1.equals(p2));  //true,id相同则认为两个对象内容相同(重写了equals而且比对的是id)

    }

}

class Person {

    int id;

    String name;

    public Person(int id,String name) {

        this.id=id;

        this.name=name;

    }

    public boolean equals(Object obj) {

        if (this == obj)

            return true;

    if (obj == null)

        return false;

    if (getClass() != obj.getClass())

        return false;

    Person other = (Person) obj;

   if (id != other.id)//当id相等时则返回为true

        return false;

return true;

    }

2.super关键字

super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。

     // 使用super调用普通方法,语句没有位置限制,可以在子类中随便调用。

     // 若是构造方法的第一行代码没有显式的调用super(...)或者this(...);那么Java默认都会调用super(),含义是调用父类的无参数构造方法。这里的super()可以省略。

3.继承树追溯

·属性/方法查找顺序:(比如:查找变量h)

      1. 查找当前类中有没有属性h

      2. 依次上溯每个父类,查看每个父类中是否有h,直到Object

      3. 如果没找到,则出现编译错误。

      4. 上面步骤,只要找到h变量,则这个过程终止。

·构造方法调用顺序:

      构造方法第一句总是:super(…)来调用父类对应的构造方法。所以,流程就是:先向上追溯到Object,然后再依次向下执行类的初始化块和构造方法,直到当前子类为止。

      注:静态初始化块调用顺序,与构造方法调用顺序一样,不再重复。

【示例5-8】构造方法向上追溯执行测试

publicclassTestSuper02 { 

    publicstaticvoidmain(String[] args) {

        System.out.println("开始创建一个ChildClass对象......");

        newChildClass();

    /*out 

    开始创建一个ChildClass对象......

    创建FatherClass

    创建ChildClass

    

    */

    }

}

classFatherClass {

    publicFatherClass() {

        System.out.println("创建FatherClass");

    }

}

classChildClass extendsFatherClass {

    publicChildClass() {

        System.out.println("创建ChildClass");

    }

4. 封装的作用和含义

编程中封装的具体优点:

     1. 提高代码的安全性。

     2. 提高代码的复用性。

     3. “高内聚”:封装细节,便于修改内部代码,提高可维护性。

     4. “低耦合”:简化外部调用,便于调用者使用,便于扩展和协作。

5.访问控制符

1. private 表示私有,只有自己类能访问

      2. default表示没有修饰符修饰,只有同一个包的类能访问

      3. protected表示可以被同一个包的类以及其他包中的子类访问

      4. public表示可以被该项目的所有包中的所有类访问

6.多态

多态指的是同一个方法调用,由于对象不同可能会有不同的行为。现实生活中,同一个方法,具体实现会完全不同。

多态的要点:

      1. 多态是方法的多态,不是属性的多态(多态与属性无关)。

      2. 多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象。

      3. 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。

7.final关键字

1. 修饰变量: 被他修饰的变量不可改变。一旦赋了初值,就不能被重新赋值。

final  int   MAX_SPEED = 120;

  2. 修饰方法:该方法不可被子类重写。但是可以被重载!

3. 修饰类: 修饰的类不能被继承。比如:Math、String等。

上一篇下一篇

猜你喜欢

热点阅读