JAVA多态的使用规则

访问成员变量时

  • 原则1:直接通过成员变量名访问成员变量时,看等号左边时谁优先用谁,没有就继续网上找。
  • 原则2:通过成员方法间接调用成员变量时,方法属于谁,就优先使用谁的成员变量,没有就往上找。

tip:成员变量不能覆盖重写。

访问成员方法时

  • 原则3:new的是谁,就优先用谁,没有就往上找。
  • 原则4:编译看左边,运行看右边。父类引用子类对象,不能调用子类独有的成员方法,否则编译报错。

例子
Father为父类,Son为子类

public class Father {    
    public String fatherName = "fatherName"; //父类独有的成员变量    
    public String name = "father";           //父子类都有的成员变量   
    
    public void show(){                        //父类成员方法(子类重写)
        System.out.println(name);
    }
    public void fatherShow(){                        //父类成员方法(子类未重写)
        System.out.println("fatherShow");
    }
}

public class Son extends Father {    
    public String sonName = "sonName";    //子类独有的成员变量    
    public String name = "son";                 //父子类都有的成员变量  
    
    @Override
    public void show(){                             //重写父类show方法
        System.out.println(name);
    }
    public void sonShow(){                        //子类成员方法
        System.out.println("sonShow");
    }
    public static void main(String[] args) {  
    
         //使用多态,将Son子类使用Father父类容纳
        Father son = new Son();      
        
        System.out.println(son.name);     
        //由原则1,等号左边时Father,所以得到Father的成员变量,输出-->"father"
        
        System.out.println(son.fatherName);
        //输出-->"fatherName"
        
        System.out.println(son.sonName);   
        //由于父类没有sonName成员变量,向上寻找也没有,所以编译报错。
        
        son.show();
        //由原则3,new的是Son子类,所以调用Son的show方法。
        //show方法调用成员变量name,由原则2,使用Son的成员变量。
        //输出-->"son"
        
        son.sonShow();
        //由原则4,编译看左(Father son = new Son()等号左边是Father父类 )
        //由于Father没有sonShow方法,所以编译报错。
        
        son.fatherShow();
        //由原则4,编译通过
        //由原则3,son没有fatherShow方法,向上找到父类的fatherShow方法
        //输出-->"fatherShow"        
    }
 }


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 重点掌握 3 类对象和方法 对象就是一个物体 类的独特存在就是一个实例,对实例进行操作叫做方法。方法可以应用于类或...
    Coder大雄阅读 1,285评论 0 2
  • Win7下如何打开DOS控制台? a:开始--所有程序--附件--命令提示符 b:开始--搜索程序和文件--cmd...
    逍遥叹6阅读 1,619评论 4 12
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,703评论 0 11
  • 面向对象笔记 一、 对象在内存中的存放方法以及被调用过程 class文件首先被加载到方法区中的class文件内容区...
    VictorBXv阅读 488评论 0 2
  • 我曾经遇到过一个很有意思的人,暂且称他为A君,恩,用一个词形容他就是逗比。 A君是属于那种说一句话就满...
    月度迷津阅读 274评论 0 0