面试题: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.原因分析

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

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

转载于:https://www.cnblogs.com/luo630/p/4495304.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值