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 基础2
    ffmpeg安装和录制linux桌面图像
    Python TCP Socket 传输服务器资源信息(C/S)
    ubuntu下,hue3.7编译安装,设置中文语言
    Python 图片转字符画
    Python快速教程
    spark安装部署
    python基础之文件处理
    python之路之函数
    python习题
  • 原文地址:https://www.cnblogs.com/liuhailong0112/p/5412207.html
Copyright © 2011-2022 走看看