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

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

  • 相关阅读:
    最全的ASP.NET开源CMS汇总
    excel学习range
    多线程写文件异常(正由另一进程使用,因此该进程无法访问该文件)的解决方法
    EXCEL之Range,cells,offset,end用法
    天佑中华
    敏捷测试感悟(之二)
    4月份到上海出差
    《Google API大全:编程·开发·实例》一书将在本周末的GDD(Google开发者大会)上首发
    敏捷测试感悟(之一)
    拿到了TD的3G测试手机
  • 原文地址:https://www.cnblogs.com/liuhailong0112/p/5412207.html
Copyright © 2011-2022 走看看