一、为什么System.out.println(temp.a);这句输出的是12?temp不是一个指向SubClass的SuperClass类型的句柄马?如果这么理解不是应该输出的是13马?temp.test();输出的不就是SubClass里的方法吗?属性是不具有多态性的 你是声明的什么类型 调用属性调用相应类的属性
temp被声明为SuperClass 调用它的a就是SuperClass的a 调用test的时候 因为方法的多态性 这时候时SubClass的二、如果SuperClass中test,改写成private void test() eclispe会抱错,又没有调用SuperClass中的test方法,为什么会抱错呢?谢谢大家拉!
你通过tmp调用test方法 首先起码要SuperClass的这个方法 你可以访问,然后才涉及到多态
你既然设为private 肯定就不能调用了虽然你是调用Sub的方法但是你是通过Super调用的 起码这个入口你要有权限
temp被声明为SuperClass 调用它的a就是SuperClass的a 调用test的时候 因为方法的多态性 这时候时SubClass的二、如果SuperClass中test,改写成private void test() eclispe会抱错,又没有调用SuperClass中的test方法,为什么会抱错呢?谢谢大家拉!
你通过tmp调用test方法 首先起码要SuperClass的这个方法 你可以访问,然后才涉及到多态
你既然设为private 肯定就不能调用了虽然你是调用Sub的方法但是你是通过Super调用的 起码这个入口你要有权限
面向对象语言的多态性只是针对函数而言
对于属性来说,基类与派生类没有重载的可能性。并且是用SuperClass还是SubClass中的属性,在编译期间就已经确定下来了。
也就是说如果你写System.out.println(((SubClass)temp).a);
做个类型转化,那么输出的就是13了
创建两个对象,从JAVA虚拟机的角度讲,temp是一个类引用变量,new SubClass()是一个类引用。
对于用父类指向子类对象,主要的一点就是父引用变量只能访问到它本身定义的所有对象,而它不知道其子类又重新定
义了哪些属性和方法,所以才会得到这样的结果。