美文网首页
2018-09-24==与equals_并重写了equlas、s

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

作者: 消失的七月 | 来源:发表于2018-09-24 22:26 被阅读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等。

    相关文章

      网友评论

          本文标题:2018-09-24==与equals_并重写了equlas、s

          本文链接:https://www.haomeiwen.com/subject/qnucoftx.html