美文网首页
Java解惑48

Java解惑48

作者: 猴猴猪027 | 来源:发表于2017-06-29 14:25 被阅读0次

看代码

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。

教训

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

相关文章

  • Java解惑48

    看代码 最后的打印结果是woof woof 解释 如果方法不是静态的,子类中进行重写,预示着要根据进行动态的分派;...

  • Java学习资料汇总全

    《JAVA解惑[JAVA PUZZLERS]》 《Java虚拟机规范(Java_SE_7)》 Java语言规范:基...

  • Java集合解惑

    本文取自工匠若水的qq群里的Java基础题目,把里面有关Java集合放在一起。全文github地址 35.Arra...

  • Java解惑46

    理论 Java在调用同名函数时,如果实参满足多个同名函数的不同形参。那么最为精确的一个方法会被调用。例如test(...

  • Java接口解惑

    每个学过Java的程序员,当学到“接口”这一章节时,教科书里一般都会写这样一句话:“Java没有多继承,但引入了接...

  • Java-volatile的作用

    参考来源 java volatile关键字解惑 使用volatie的场景 如何保证内存的可见性 在java虚拟机的...

  • java 线程同步解惑

    1.每个对象都有一把锁,这个锁(对象)又有属于它的两个池,锁池(Entry Set)和等待池(Wait Set)。...

  • Java集合--HashMap解惑

    3 Map 昨晚去了鸟巢,膜拜了5位40多岁的大爷们。算上这次,已是第三回了,每一次都有不同的感受、体验。期待,下...

  • java并发copyonwritelist解惑

    直接干: > 喜欢java并发编程的请加群:736156823 1.jdk版本jdk-8u121-linux-x6...

  • 深入理解java虚拟机

    title: 深入理解java虚拟机date: 2020-01-23 15:48:23tags: [java虚拟机...

网友评论

      本文标题:Java解惑48

      本文链接:https://www.haomeiwen.com/subject/cbvmcxtx.html