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

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

  • 相关阅读:
    测试SQL
    UpdatePanel中弹出新窗口
    无法打开物理文件 操作系统错误 5:拒绝访问 SQL Sever
    Repeater嵌套Repeater
    SQL2000清除SQL日志
    sql批量修改字段内容的语句-SQL技巧
    SQL时间格式化 转载备用~
    远程连接数据库
    MySql 文件导入导出
    pyspark启动与简单使用----本地模式(local)----shell
  • 原文地址:https://www.cnblogs.com/liuhailong0112/p/5412207.html
Copyright © 2011-2022 走看看