本帖最后由 IfWhileCaseFor 于 2013-9-5 16:22 编辑
附上我的理解:
引用变量只能调用声明该变量所用到的类中的方法,例如我们有 Object p = new Person()则p只能调用Object类中的方法,不能调用Person类中的而方法;对象的属性则没有多态性;Fu类中int x = 1;就是一个对象的属性--实例属性而非类的成员属性,satic修饰的属性为类的成员属性;- public class TestDemo24{
- public static void main(String[] args){
- Base ss = new SubBase24(); //编译时与运行时类型不同导致多态发生
- System.out.println("输出SS的book属性 "+ss.book); //输出的为父类Base的book属性,而非子类的book属性
- ss.base(); //此处调用父类的base方法
- ss.test(); //此处调用子类的重写的父类test方法
- //ss.sub(); 父类不包含sub方法,此处会报错
- }
- }
- class Base24{ //定义父类Base24
- public int book = 6; //父类的book属性为6
- public void base(){
- System.out.println("父类的普通方法");
- }
- public void test(){
- System.out.println("父类被覆盖的方法");
- }
- }
- class SubBase24 extends Base{
- public String book = "天才程序员";//重新定义父类中的book属性
- public void test(){ //重写父类的test方法
- System.out.println("子类重写父类的test方法");
- }
- public void sun(){
- System.out.println("子类的普通方法");
- }
- }
复制代码 输出结果为- 输出SS的book属性 6
- 父类的普通方法
- 子类重写父类的test方法
复制代码 仅为个人理解,谢谢! |