1.属性不具有多态性

2.多态性的体现:继承,重写,父类引用指向子类对象;具体的原因需要分析字节码文件,以及相关的指令的执行过程及顺序;

3.重写方法的调用是依靠静态解析实现的,也就是在编译时依据静态类型确定方法版本的选择;

4.静态解析:在类加载完成后就确定唯一调用的版本:例如:静态方法,构造器,私有方法,final修饰的方法,这些一般叫做静态解析,通常使用invokespecial,invokestatic,invokeinterface指令去调用,final修饰的方法由于历史原因使用invokevirtual指令;

5.invokevirtual指令的执行过程:1.栈顶的元素指向实际类型的对象;2.如果该对象有此方法就会执行;3.如果没有会向其父类中寻找方法;

6.Animal animal = new dog();animal.eat();dog是animal的子类,为什么会产生多态性?

答:起初在静态解析的过程中,方法的确定为animal的eat方法,这时会将animal的eat方法的符号引用写在invokevirtual指令后面; 接着invokevirtual会执行第五步骤中的过程,最后实现了多态的方法;

7.如果把常见的多态中方法的调用改为调用对象的属性时会发现,属性不具有多态性,所以这就是为什么将属性的权限修饰符修饰为private方法,而使用get方法和set方法去获得属性,这时就会使得属性,方法都具备多态性,能够保持代码逻辑的统一。

8.多态性就是同样的代码体现不同的状态,