• C#用子类实例化父类


    class jk
    {int a=1;
    public void fun1()
    {
    System.out.println("父类funl()") ;
    }
    public void fun2()
    {
    System.out.println("父类fun2()") ;
    }
    } // Student类扩展自jk类,也就继承了jk类中的fun1()、fun2()方法 class Student2 extends jk
    {int a=4;
    char c=45;
    // 在这里复写了jk类中的fun1()方法
    public void fun1()
    {
    System.out.println("子类fun1()") ;
    }
    public void fun3()
    {
    System.out.println("子类新方法fun3()") ; }
    } public class 实验
    {
    public static void main(String[] args)
    {
    // 此处,父类对象由子类实例化
    jk p = new Student2() ;
    // 调用fun1()方法,观察此处调用的是哪个类里的fun1()方法
    p.fun1() ;
    p.fun2() ;
    System.out.println("a="+p.a);
    }
    }
    输出:子类fun1()
    父类fun2()
    a=1
    以上fun1()方法经过复写了所以输出“子类fun1()”,但是属性a也复写成4了啊为什么输出还是原来的1
    还有不能调用p.fun3()和p.c,否则编译不让通过,这里的p应该就是个引用吧,就是存储了实例化的地址。
    请大家说说其中的实例化过程到低是怎么样的,谢谢!

    既然你知道对象,和引用
    那你应该明白两者的关系
    new 什么,就是什么对象
    所以,你这里只有子类 Student2 的对象,而没有父类 jk 的对象
    你只是让父类引用指向了子类对象
    在父类引用指向子类对象时,不能访问子类新加的方法

    System.IO.Stream fromFile = new FileStream(srcImgPath, FileMode.Open);

    //这是一个数据抽象化的概念 java中把这个叫上转型,比如:
    class A,class B,B继承了A,实例化的时候A a= new B(); a就叫上转型对象,
    对于实例a(上转型对象),它不能操作B新增的成员变量(失掉了这部分属性),;不能使用B类新增的方法(失掉了一些功能)也就是B类中非重写的方法。
  • 相关阅读:
    (Java实现) 删数问题
    (Java实现) 车站
    (Java实现) 活动选择
    (Java实现) 过河卒
    (Java实现) 美元汇率
    (Java实现) 零件分组
    (Java实现) 图的m着色问题
    (Java实现) 数塔问题
    Java实现 蓝桥杯VIP 算法训练 数的划分
    DirectUI的消息流转
  • 原文地址:https://www.cnblogs.com/xianyin05/p/3079145.html
Copyright © 2020-2023  润新知