Day11多态部分-6 【1.4 多态的应用以及注意事项】

来源:互联网 发布:一淘网和淘宝联盟 编辑:程序博客网 时间:2024/05/16 00:28

【1.4 多态的应用以及注意事项】

  • 在多态中:父类指向子类对象时

    成员函数的特点:

    编译看左边 运行看右边

    在编译时期 参阅引用型变量所属的类中是否有调用的方法 如果有,编译通过;如果没有, 编译失败

    在运行时期 参阅对象所属的类中是否有调用的方法

    在堆内存中

    实例对象:子类包含父类 子类对父类说"你的就是我的 我的还是我的"

    成员方法 动态绑定(根据对象的实际类型确定执行哪个方法)

    成员变量的特点:

    编译看左边 运行看左边

    成员变量不具备多态性 通过引用变量来访问其包含的实例变量

    当父类 子类出现重名变量的时候 多态状态下看的是 父类

    因为在创建子类对象时 堆内存中其实是有两个变量的

    一个是父类的num 一个是子类的num

    你再拿父类的引用 去找num的时候 他就找到自己的了

    成员变量是静态绑定(只根据当前表示类型决定使用那个变量)

    成员变量(属性)不算重写 父类中已经有属性了 就不调用子类属性了

    静态成员函数

    编译看左边 运行看左边 静态绑定 绑定在方法所属的类上了

    总结:*****

    成员方法 编译看左边 运行看右边

    成员变量 编译看左边 运行看左边

    静态成员方法 编译看左边 运行看左边

    • package Day11;

      public class Test_05 {

      public static void main(String[] args) {

      MainBoard mb = new MainBoard();

      mb.run();

      // mb.useNetCard( );

      // mb.useSoundCard( );

      mb.useNetCard(new NetCard());//没必要创建引用了

      mb.useSoundCard(new soundCard());

      }

      }

      interface PCI {

      public void open();

      public void close();

      }

      class NetCard implements PCI {

      public void open() {

      System.out.println("启动网卡");

      }

      public void close() {

      System.out.println("关闭网卡");

      }

      }

      class soundCard implements PCI {

      public void open() {

      System.out.println("关闭声卡");

      }

      public void close() {

      System.out.println("关闭声卡");

      }

      }

      class MainBoard {

      public void run() {

      System.out.println("启动主板");

      }

      public void useNetCard(NetCard n) {//引用子类的方法

      n.open();

      n.close();

      }

      public void useSoundCard(soundCard n) {//引用

      n.open();

      n.close();

      }

      //接口型引用,指向自己的子类对象,接口不能创建对象,只能用子类

      public void usePCI(PCI p) {//PCI p= new NetCard()....

      if (p != null) {//如果有什么传入进来就显示什么

      p.open();

      p.close();

      }

      }

      }     

原创粉丝点击