文章中内容部分来自《java核心技术卷1》 《java编程思想》 部分来自网络http://www.cnblogs.com/chalk/p/4717322.html
java学习路线图 http://www.cnblogs.com/biehongli/p/5754555.html
一 继承和多态
1 继承是一种is-a的关系,通过extends关键字。表面一个正在构造的新类(子类,派生类)派生于一个已经存在的类(超类,基类)。
2 继承是对代码的复用,方法的重写、覆盖。
3 在有继承关系的两个类中:
a private(私有)可以被继承,但无法访问和覆盖,即使在子类中覆盖了父类的方法,在多态里面仍然会调用父类的方法。
b 静态方法有继承无覆盖,覆盖发生在对象的成员方法中,也就是发生在堆内存中,但是静态数据都是在静态内存块中。
4 发生覆盖的条件:
a 发生在有继承关系的两个类之间
b 方法必须具有相同的方法名,返回值类型,参数列表(如果参数列表不同,系统会默认这两个重载后的不同的两个方法)
c 重写的方法不能比被重写的方法有更低的访问权限
d 重写的方法不能比被重写的方法抛出更宽泛的异常
e 私有方法不能被覆盖,不调用不报错,调用就报错
f 构造方法无法被覆盖,因为构造方法不能被继承
g 静态方法不存在覆盖,继承是对象的继承,而不是类的继承。静态方法进入内存以后,不会再有新的内存变化,所以没有
覆盖这一说。
h 覆盖指的是成员方法,和成员变量无关。
5 多态 父类的引用指向子类的对象。父类的引用(一是指父类变量指向的那个内存空间二也是指父类自由的类型信息表,这个表示任何对象都具备的,和继承多态无关)。子类的对象(一是指子类的那个堆内存空间。二也是指子类的那个类型信息表)。多态发生在赋值时,多态只跟成员方法有关。
6 多态(向上转型)就是用父类对象的类型信息表去调用子类类型信息表中和父类相同的成员方法。所谓相同,就是之前子类覆写父类方法。父类信息表中没有的成员方法,就调用不到。向下转型就是用子类的类型信息表代替父类的类型信息表,就可以完全的让位子类对象中所有的变量和方法。
7 静态绑定:编译时(javac的时候)就把数据赋值,叫静态绑定。把我们写的源代码编译成对应的机器码,检查语法错误,拼写检查。绑定:把引用数据类型直接绑定类型明确,就是把赋值运算符前后的类型指定死,并且声明说不能更改,这个时候叫静态绑定。这个时候的赋值是指给类对象中的成员变量赋值。
8 动态绑定:程序运行的时候,我们程序的行为,特别是内存行为,可以按照需求改变,这种就叫动态绑定。这种改变对应到代码上就是不同的对象行为,不同的对象,对应的是不同代码,不同的代码对应又是不同的内存操作,不同的代码会有不同的名字。