前言:
眼前各位老铁们对“java静态方法调用实例方法”大约比较关怀,看官们都需要知道一些“java静态方法调用实例方法”的相关文章。那么小编在网络上网罗了一些对于“java静态方法调用实例方法””的相关知识,希望姐妹们能喜欢,我们一起来了解一下吧!Java方法调用可以是解析调用,或者是分派调用,无论什么方式,目的就是找到适合的方法。
解析调用比较简单,在编译的时候就确定了调用的目标方法,这类方法在运行期间是不变的,比如静态方法。
分派调用又分为静态分派和动态分派,静态分派通过静态类型就能确认调用方法。先看下面的代码的输出。
public class TestMethodInvoke { class Animal { } class Cat extends Animal { } class Dog extends Animal { } private void run(Animal animal) { System.out.println("Animal run!"); } public void run(Cat cat) { System.out.println("Cat run!"); } public void run(Dog dog) { System.out.println("Dog run!"); } public static void main(String[] args) { TestMethodInvoke test = new TestMethodInvoke(); Animal man = test.new Dog(); Animal woman = test.new Cat(); test.run(man); test.run(woman); }}
对有经验的开发者,很容易知道上面程序的执行结果。
Animal run!Animal run!
如果你的答案不是这个也没有关系,我来简单说明下静态类型和运行时类型,变量Animal成为静态类型,Cat或者Dog则被称为运行时类型。编译器是根据参数的静态类型来选择调用方法的版本,叫做静态分派。
TestMethodInvoke test = new TestMethodInvoke();// Animal man = test.new Dog();// Animal woman = test.new Cat(); test.run(test.new Dog()); test.run(test.new Cat());
以上代码简单改了参数的类型,执行结果又是另外一种情形,结果如下,
Dog run!Cat run!
以下是一个测试题,大家可以执行试试,结果后续在发布到评论区。
public class TestOverLoad { public static void hi(Object obj) { System.out.println("Hi Object"); } public static void hi(Long obj) { System.out.println("Hi Long"); } public static void hi(Comparable comparable) { System.out.println("Hi Comparable"); } public static void main(String[] args) { hi(1000_0000); }}
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #java静态方法调用实例方法