zoukankan      html  css  js  c++  java
  • 继承与多态

    1.

     

    代码:

    public class Test
    
    {
    
        public static void main(String args[])
    
        {
    
             C a=new C();
    
             a.display();
    
        }
    
    }
    
    class A
    
    {
    
    public void display()
    
    {
    
    System.out.println("hello");
    
    }
    
    }
    
    class C extends A
    
    {
    
     
    
    public void display()
    
    {
    
    System.out.println("word");
    
    super.display();
    
    }
    
    }
    
     
    

      

    2.

    .

    判断:

    第二个运行错。

    第四个编译错误。

    结果:

    第二、四个编译错误。

    第五个运行错误。

    原因:

            m=d;     //编译正确,因为子类对象可以直接赋给基类变量。

          d=m;     //编译错误,基类对象要赋给子类对象变量,必须执行类型转换(子类对象变量=(子类名)基类对象名;)

          d=(Dog)m;   //编译正确,基类对象要赋给子类对象变量,必须执行类型转换

          d=c;      //编译错误,不同子类之间不能复制

          c=(Cat)m;   //运行错误,m已经转换成Dog, Dog和Cat子类之间不能转换

     

    3.

     

    1.运行结果:

     

    2.原因:

    父类对象可以访问子类的成员,当然只限于”覆盖”发生时,调用的时候,对象是子类的,就调用子类的方法,对象是父类的,就调用父类的方法。当然还有如下特性:

    1.当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。这个特性实际上就是面向对象“多态”特性的具体表现。

    2.如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。

    3.如果子类被当作父类使用,则通过子类访问的字段是父类的.

    3.修改代码并测试:

     

    则结果为:

     

    说明新加的后边的输出结果是调用的子类的方法。

  • 相关阅读:
    osgi实战学习之路:8. Service-3之ServiceTracker
    使用Jquery+EasyUI 进行框架项目开发案例解说之二---用户管理源代码分享
    QQ音乐产品经理黄楚雄:产品与用户的情感联系
    AsyncTask简单入门
    晨跑感悟:三快三爽三熬
    【cocos2d-x制作别踩白块儿】第九期:游戏计时功能(附源代码)
    cocos2d3.0 Scale9Sprite
    新的历程-近两个月的工作总结
    基因突变的实例:加拿大无毛猫
    ANTS Performance Profiler 破解使用
  • 原文地址:https://www.cnblogs.com/ssyh/p/7811730.html
Copyright © 2011-2022 走看看