zoukankan      html  css  js  c++  java
  • 面试题:Java静态/非静态方法重写

    1.非静态方法重写

    public class Test {
        public static void main(String[] args) throws Exception {
            Tree pine = new Pine();
            Tree oak = new Oak();
            say(pine);
            say(oak);
        }
        private static void say(Tree tr) {
            tr.say();
        }
    }
    
    class Tree {
        public void say() {
            System.out.println("Tree");
        }
    }
    class Pine extends Tree {
        public void say() {
            System.out.println("Pine");
        }
    }
    class Oak extends Tree {
        public void say() {
            System.out.println("Oak");
        }
    }

    程序执行后输出:
    Pine
    Oak

    2.静态方法重写

    class Tree {
        public static void say() {
            System.out.println("Tree");
        }
    }
    class Pine extends Tree {
        public static void say() {
            System.out.println("Pine");
        }
    }
    class Oak extends Tree {
        public static void say() {
            System.out.println("Oak");
        }
    }

    程序执行后输出:
    Tree
    Tree

    3.原因分析

    静态方法是属于类的,理论上可以重写,但其不具有多态性。因为多态性指在运行时确定类型,静态方法却是在编译时就确定类型的。

    多态性只与实例、非静态方法相关。

  • 相关阅读:
    JAVA 练习1
    JSP基础
    网络协议
    mysql基础
    python之高级
    powershell基础
    python之迭代器与遍历
    python之面向对象
    linux常用命令
    docker 安装 ElasticSearch:7.4.2
  • 原文地址:https://www.cnblogs.com/luo630/p/4495304.html
Copyright © 2011-2022 走看看