在java的多态调用中,new的是哪一个类不一定就是调用这个类的方法。

版权声明:本文自由转载,转载请注明出处。 https://blog.csdn.net/qq_38071429/article/details/85010402

 举例说明:

知识点: 

  1. 方法重载:同一个类中参数类型或者数量不同但方法名相同的方法
  2. 方法重写(覆写/覆盖):出现在具有继承关系的类中,方法参数类型和个数、方法名以及返回值都相同,子类方法的访问控制权限不能小于父类方法,子类方法会覆盖掉父类方法,如果想调用父类的同名方法,可以使用super()

多态的运行: 

  1. 实例方法:动态绑定,即引用的变量实际引用的类型是哪一个,则运行哪一个实例方法。在运行时由java虚拟机动态决定。 
  2. 静态方法:静态绑定,即引用的变量所声明的类型是哪一个,则运行哪一个静态方法。在编译阶段就已经做出了决定。 
  3. 成员变量(包括静态变量和实例变量):静态绑定,即引用变量所声明的类型是哪一个,则运行哪个成员变量。在编译阶段就已经做出了决定。 

Base: 引用变量所声明的类型,Sub:引用变量实际引用的类型。

public class Base {  
    String var = "baseVar";  
    static String staticvar = "staticBasevar";  
  
    void method() {  
        System.out.println("Base method!");  
    }  
  
    static void staticMethod() {  
        System.out.println("static Base method!");  
    }  
  
    public static void main(String[] args) {    
        Base who = new Sub();        
        System.out.println("who.var=" + who.var);  // who.var=baseVar
        System.out.println("who.static =" + who.staticvar);  // who.static =staticBasevar
        who.method();  // Sub method!
        who.staticMethod();  //static Base method!
  
    }    
}  
  
class Sub extends Base {  
  
    String var = "SubVar";  
    static String staticvar = "staticSubvar";  
  
    void method() {  
        System.out.println("Sub method!");  
    }  
  
    static void staticMethod() {  
        System.out.println("static Sub method!");  
    }  
  
    String subvar = "sssssssssss";  
  
    void submethod() {  
        System.out.println("Sub method!wwwwwwwwwww");  
    }  
  
}

参考博客: https://wj196.iteye.com/blog/1323244

猜你喜欢

转载自blog.csdn.net/qq_38071429/article/details/85010402