• 继承与多态


    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.修改代码并测试:

     

    则结果为:

     

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

  • 相关阅读:
    5G 需要换 SIM 卡吗?
    多线程设计模式
    4G LTE/EPC UE 的附着与去附着
    4G EPS 的网络协议栈
    MYSQL远程登录权限设置 ,可以让Navicat远程连接服务器的数据库
    MYSQL远程登录权限设置 ,可以让Navicat远程连接服务器的数据库
    MYSQL远程登录权限设置 ,可以让Navicat远程连接服务器的数据库
    2018年要学习的10大Python Web框架
    2018年要学习的10大Python Web框架
    2018年要学习的10大Python Web框架
  • 原文地址:https://www.cnblogs.com/ssyh/p/7811730.html
Copyright © 2020-2023  润新知