• static/final成员与多态


    前期绑定:程序在编译之前将调用方法绑定,如面向过程的C语言。

    后期绑定:程序在运行时决定与哪个方法绑定;如所有面向对象语言。

    在java中,static和final是不参与多态的,就是说多态性对static和final描述的成员无效。

    代码:

    package com.pcitc.pattern.static1;

     

    public class StaticAbstract {

       public static String staticVar = "我是父类的静态变量";

      

       public static void printStatic(){

         System.out.println("我是父类的静态方法");

       }

      

       public void printNoStatic(){

         System.out.println("我是父类的非静态方法");

       }

    }

    package com.pcitc.pattern.static1;

    public class StaticBean extends StaticAbstract{

         public static String staticVar = "我是子类的静态变量";

        

         public static void printStatic(){

            System.out.println("我是子类的静态方法");

         }

        

         public void printNoStatic(){

            System.out.println("我是子类的非静态方法");

         }

    }

    package com.pcitc.pattern.static1;

     

    public class Client {

     

      /**

       * @param args

       */

      public static void main(String[] args) {

         // TODO Auto-generated method stub

           

             StaticAbstract sa = new StaticBean();

             System.out.println(sa.staticVar);

             sa.printStatic();

             sa.printNoStatic();

     

             System.out.println("--------------");

            

             StaticBean sb = new StaticBean();

             System.out.println(sb.staticVar);

             sb.printStatic();

             sb.printNoStatic();

      }

     

    }

    运行结果:

    我是父类的静态变量

    我是父类的静态方法

    我是子类的非静态方法

    --------------

    我是子类的静态变量

    我是子类的静态方法

    我是子类的非静态方法

    通过以上代码示例,可得出:sa.printStatic();调用的是父类的静态方法,同StaticAbstract. printStatic(),没有多态。sa.printNoStatic();调用的是子类的方法,是多态。
  • 相关阅读:
    printf,sprintf,fprintf的区别与联系
    linux repo init 遇到的问题
    POSTMAN使用说明
    HTTP协议-深入了解
    HTTP协议-详解篇
    HTTP协议-基础篇
    多线程学习
    I/O流
    String类学习&泛型
    集合
  • 原文地址:https://www.cnblogs.com/mysqlcluster/p/2033470.html
Copyright © 2020-2023  润新知