zoukankan      html  css  js  c++  java
  • 继承

    继承的关系:“is a”(每个经理都是雇员)

    子类中可以直接使用父类中的public 和protected变量,但是不能使用private变量。

    super并不是一个对象的引用,不能赋给一个对象变量,它只是一个指示编译器调用超类方法的特殊关键字

    super构造器:super(name,id),super调用构造器语句必须是子类第一条语句。

    如果子类构造器没有显式调用超类构造器,则将自动调用超类没有参数的构造器。如果超类没有,那么报错。

    super的两个用途:1、调用超类的方法;2、调用超类的构造器

    一个对象变量可以指示多种实际类型的现象被成为多态;在运行时你能够自动的选择调用那个方法的现象称为动态绑定

    多态:

    虽然可以将一个子类的对象赋给超类变量,但是编译器仍将这个对象看成超类对象,不能调用子类的方法。

    子类数组可以转换成超类数组的引用:

    Manager[] managers = new Manager[10];
    Employee[] staf = managers;
    staf[0] = new Employee("Harry Hacker", 50000, 1989, 10, 1);//编译器接纳,运行时报错: ArrayStoreException

    方法签名=名字+参数;允许子类将覆盖方法的返回类型定义为原返回类型的子类型。

     静态绑定(private,static,final方法)和动态绑定(调用的方法依赖于参数实际类型)

     动态绑定重要特性:对现有程序扩展无需修改代码。

    子类方法可见性不能低于父类。


    final:

    确保语义在子类中不会发生改变 

    强制类型转化:

    1、只能在继承层次内进行

    2、将超类转换程子类前,instanceof检查

    抽象类:

    包含了一个或多个抽象方法的类本身必须声明为抽象的。

    抽象类可以包含具体数据和具体方法。

    类即使不含抽象方法,也可以将类声明为抽象类。

    抽象类不能被实例化。但是可以定义一个抽象类的对象变量。

    Person[] people = new Person[2];

    // fill the people array with Student and Employee objects
    people[0] = new Employee("Harry Hacker", 50000, 1989, 10, 1);
    people[1] = new Student("Maria Morris", "computer science");

    // print out names and descriptions of all Person objects
    for (Person p : people)
    System.out.println(p.getName() + ", " + p.getDescription());

    如果抽象类Person中没有getDescription方法,则不能p.getDescription()。编译器只允许调用在类中声明的方法。

    Object类:

    只有基本类型不是对象,所有的数组类型都是对象(包括基本类型)。

    equals方法:

    public boolean equals(Object obj) {
    if (this == obj)
    return true;
    if (obj == null)
    return false;
    if (getClass() != obj.getClass())
    return false;
    Privilege other = (Privilege) obj;
    if (name == null) {
    if (other.name != null)
    return false;
    } else if (!name.equals(other.name))
    return false;
    return true;
    }

    hashcode方法:

    String类的散列码是由内容到处的,所以只要字符串内容相同,则hash code相同。

    而没有定义hashCode()方法的类,会使用object类默认的hashCode方法导出对象存储地址。

    当重新定义equals方法时,必须重新定义hashCode方法,以便用户可以将对象插入到散列表中。

    equals与hashcode的定义必须一致,如果a.equals(b)返回true,那么a.hashcode()就必须和b.hashcode()具有相同的值。

  • 相关阅读:
    HDU6768 The Oculus(Hash)
    HDU6672 Lead of Wisdom(爆搜)
    外一章
    深度学习笔记一
    ACM International Collegiate Programming Contest, Arab Collegiate Programming Contest 2013
    python局部变量&全局变量
    每日日报
    每日日报
    每日日报
    每日日报
  • 原文地址:https://www.cnblogs.com/ChuPengcheng/p/6084001.html
Copyright © 2011-2022 走看看