面试题: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)