继承、多态、动态绑定、静态绑定

  1. 继承
  2. 多态
  3. 动态绑定
  4. 静态绑定

继承

概念:基于已存在的类构造出一个新类,并自动继承其方法和域(属性)
优点:提高代码的重用性!
注意:
1.继承必须合理,子类与父类的关系是is-a
2.父类的成员是共性,父类抽取了共性内容,子类在父类的方法和域上拓展。
继承中子类域和方法的特点
1.子类可重写父类方法;
2.重写时,子类不可低于父类的可见性。
3.如果子类重写了父类的方法,或者域同名时,要使用父类的方法或者域时需要用super关键字调用。
4.子类中的构造函数要调用父类的构造函数super():目的给父类的数据赋值。
继承的特点
1:单继承
2:支持多层继承
3:父类定义了继承树中共性内容
为什么只支持单继承?
如果支持,则调用父类的方法和域会产生不确定性
向上抽取原则:把子类共性抽取到父类中。
相关概念:
继承层次:有一个公共超类派生出来的所有类的集合被称为继承层次。
继承链:在继承层次中,从某个特定的类型在祖先的路径被称为该类的继承链
is-a规则:表明子类的每个对象也是超类的对象。
另一种表述法是置换原则。它表明程序中出现超类的任何地方都可以用子类对象置换。
多态:
一个对象变量可以指示多种实际类型的现象被称为多态。
在运行时能够自动地选择调用哪个方法的方法的现象称为动态绑定

调用对象方法的过程
1.编译器查看对象的声明类型和方法名
x.f(param),且隐式参数x声明为C类恶对象
可能会存在对个名字为f,但参数类型不一样的方法。如f(int),f(string),编译器将会一一列举C类中名为f的方法和其超类中访问属性为public且名为f的方法。
2.编译器将查看调用方法时提供的参数类型。
如果所有名为f的方法中存在一个与提供类型完全匹配,就选择该方法。这个过程被称为重载解析。
如果没有找到与参数匹配的方法,就会报错

动态绑定调用方法时,每次调用都要进行搜索,时间开销大,因此JVM预先为每个类创建一个方法表,列出所有方法的签名和实际调用的方法。在调用方法时,在jvm查找这个表就行

进化版
x.f()
1. 虚拟机提取x的实际类型的方法表
2.jvm搜索定义f()方法签名的类
3.虚拟机调用该方法
如果是private方法、static方法、final方法或者构造器,那么编译器将可以准确地知道调用哪个方法,我们将这种调用方式称为静态绑定。

阻止继承:final类
如果一个类声明为final,其方法自动地成为final、而不包括域。

你可能感兴趣的:(JAVA基础)