zoukankan      html  css  js  c++  java
  • 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类中非重写的方法。
  • 相关阅读:
    33、springboot——springboot整合RabbitMQ(1)②
    33、springboot——消息之JMS,AMQP简介①
    32、springboot——缓存之整合Redis
    Redis学习——2、RDB的简单相关配置及测试
    Redis学习——1、CentOS7中安装redis以及一些基本配置
    CentOS7查看及开放端口
    moment
    flex兼容性
    caniuse使用
    混合整数线性规划,图的最大流,图的匹配,求解
  • 原文地址:https://www.cnblogs.com/xianyin05/p/3079145.html
Copyright © 2011-2022 走看看