zoukankan      html  css  js  c++  java
  • 多态实验:基类——子类成员

    class Instrument {
        private String instrumentName;
        Instrument(){
            instrumentName = "instrument";
        }
        public String toString() {return instrumentName;}
    }
    class Wind extends Instrument{
        Wind(){
            instrumentName = "Wind";
        }
    }
    public class Music3{
        public static void main(String[] args){
            Instrument ii = new Instrument();
            System.out.println("I am "+ ii);
            Instrument ww = new Wind();
            System.out.println("I am "+ ww);
        }
    }

    结果:编译不通过,编译错误,子类无法访问父类的private成员instrumentName

    修改一:

    class Instrument {
        protected String instrumentName;
        Instrument(){
            instrumentName = "instrument";
        }
        public String toString() {return instrumentName;}
    }
    class Wind extends Instrument{
        Wind(){
            instrumentName = "Wind";
        }
    }
    public class Music3{
        public static void main(String[] args){
            Instrument ii = new Instrument();
            System.out.println("I am "+ ii);
            Instrument ww = new Wind();
            System.out.println("I am "+ ww);
        }
    }

    结果:java Music3

      I am instrument

      I am Wind

    分析:执行java Music3时发生以下动作:

      1. main()函数执行,先new一个Instrument对象,调用其构造函数将instrumentName设置为“instrument”;

      2. 紧接着prinln打印 I am + instrument,这里定义toString()为打印instrumentName成员,这里是“instrument”;所以最终打印I am instrument;

      3. new 一个Wind对象,并赋值给Instrument 对象ww,发生向上转型;

        3.1 Wind继承自Instrument,先调用Instrument构造函数,将instrumentName设置为"instrument";

        3.2 接着调用Wind的构造,再把instrumentName 设置(实际上是修改了)为“Wind”

      4. 通过System.out.println("I am "+ ww)打印,此时toString还是父类的那个toString,instrumentName还是父类的,但是已经被Wind子类对象修改为"Wind"

        所以打印出I am Wind

    class Instrument {
        private String instrumentName;
        Instrument(){
            instrumentName = "instrument";
        }
        public String toString() {return instrumentName;}
    }
    class Wind extends Instrument{
        private String instrumentName;
        Wind(){
            instrumentName = "Wind";
        }
        public String toString() {return ("son:"+instrumentName);}
    }
    public class Music3{
        public static void main(String[] args){
            Instrument ii = new Instrument();
            System.out.println("I am "+ ii);
            Instrument ww = new Wind();
            System.out.println("I am "+ ww);
        }
    }

    运行结果:

    结果:java Music3

      I am instrument

      I am son:Wind

    子类重载了父类的成员变量和方法。

  • 相关阅读:
    python 判断矩阵中每行非零个数的方法
    用Python 绘制分布(折线)图
    统计numpy数组中每个值出现的个数
    pandas 获取不符合条件的dataframe
    Python 中如何判断 list 中是否包含某个元素
    docker与Spring boot的集成:docker-maven-plugin使用
    处理kdevtmpfsi挖矿病毒
    使用docker-maven-plugin推送镜像到远程docker服务器
    docker 开启2375端口,提供外部访问docker
    Spring Boot 配置优先级顺序
  • 原文地址:https://www.cnblogs.com/liuhailong0112/p/5412207.html
Copyright © 2011-2022 走看看