Java解惑48

看代码

public class Bark {

    public static void main(String[] args){
        Dog woofer=new Dog();
        Dog nipper=new Basenji();
        woofer.bark();
        nipper.bark();
    }
}

class Dog{

    public static void bark(){
        System.out.println("woof");
    }
}

class Basenji extends Dog{
    public static void bark(){}
}

最后的打印结果是woof woof

解释

如果方法不是静态的,子类中进行重写,预示着要根据进行动态的分派;如果方法是静态的,子类与父类有相同的方法签名,方法只能被隐藏。(千万不要隐藏静态方法)
当一个静态方法被调用时,被调用的方法都是在编译时被选定的,这种选定是基于修饰符的编译器类型作出的,修饰符的编译器类型是方法表用表达式中圆点左边部分的名字。
在本例中,方法调用的修饰符分别是woofer和nipper,他们都被声明为Dog类型。所以编译器使它们调用的是相同的方法:Dog.bark。

教训

静态方法,用类来标示;表达式被用作实例方法的修饰符。调用一个静态方法时,通常都是用一个类而不是表达式来标示它。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Win7下如何打开DOS控制台? a:开始--所有程序--附件--命令提示符 b:开始--搜索程序和文件--cmd...
    逍遥叹6阅读 5,527评论 4 12
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 5,104评论 0 2
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 7,624评论 0 11
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 4,798评论 0 4
  • 冬日里的阳光总是那么温暖,我站在窗台旁晒太阳。我一个人待着,居然没有放音乐,室内很安静,听着外面传来的生活的声音,...
    沐篱阅读 1,432评论 0 0

友情链接更多精彩内容