super关键字
  • super是直接父类对象的引用。
  • 可以通过super来访问父类中被子类覆盖的方法或属性。
继承
  • 父类方法的重写:
    • “==”:方法名、形参列表相同。
      = “≤≤”:返回值类型和异常类型,子类小于等于父类。
    • “≥”:访问权限,子类大于等于父类
  • 构造方法调用顺序:
    • 根据super的说明,构造方法第一句 总是:super(…)来调用父类对应的构造方法。
    • 先向上追溯到Object,然后再依次向下执行类的初始化块和构造方法,直到当前子类为止。

代码示例

package com.cwl.base.day03.oop;

/**
 * @program: java_base
 * @description:
 * @author: ChenWenLong
 * @create: 2019-11-07 10:42
 **/
public class TestExtends {

    public static void main(String[] args) {
        Student   stu  =  new Student();
        stu.name="ChenWenLong";
        stu.height = 172;
        stu.rest();

        Student  stu2 = new Student("希希",6,"挖掘机专业");

        System.out.println(stu2   instanceof  Student);
        System.out.println(stu2   instanceof   Person );
        System.out.println(stu2   instanceof   Object );
        System.out.println(new Person()   instanceof   Student );

    }
}

class  Person   /*extends  Object*/ {
    String  name;
    int   height;

    public void  rest(){
        System.out.println("休息一会!");
    }
}

class  Student   extends  Person  {
    String   major;

    public   void   study(){
        System.out.println("学习两小时!");
    }

    public  Student(String name,int height, String  major){
        this.name = name;
        this.height = height;
        this.major = major;
    }

    public Student(){
    }


}
对象的比较—==和equals()
  • ==
    • 比较两基本类型变量的值是否相等
    • 比较两个引用类型的值即内存地址是否相等,即是否指向同一对象。
  • equals()
    • 两对象的内容是否一致

代码示例

package com.cwl.base.day03.oop;

/**
 * @program: java_base
 * @description:
 * @author: ChenWenLong
 * @create: 2019-11-07 10:39
 **/
public class TestEquals {
    public static void main(String[] args) {
        Object obj;
        String str;

        User u1 = new User(1000,"***","123456");
        User   u2 = new User(1000,"***","123456");

        System.out.println(u1==u2);
        System.out.println(u1.equals(u2));

        String  str1 = new String("***");
        String  str2 = new String("***");
        System.out.println(str1==str2);  //false
        System.out.println(str1.equals(str2));  //true

    }
    
}

class  User  {
    int id;
    String name;
    String pwd;

    public User(int id, String name, String pwd) {
        super();
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + id;
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        User other = (User) obj;
        if (id != other.id)
            return false;
        return true;
    }



}

多态 polymorphism
  • 多态性是OOP中的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有 在执行过程中才被决定而非在编译期间就决定了。这对于大型系统来说能提高系统的灵活性和扩展 性。
  • java中如何实现多态?使用多态的好处?