zoukankan      html  css  js  c++  java
  • 多态是如何产生的:

    下面的代码完整阐述了多态的产生过程和其特性:

    import static java.lang.System.*;
    class BaseClass{
    	public int book=6;
    	public void base(){
    		out.println("BaseClass类的base()方法!");
    	}
    	public void test(){
    		out.println("BaseClass类的test()方法!");
    	}
    }
    
    public class SubClass extends BaseClass{
    	//-重写,但是类型不一样
    	public String book="这是字符类型的book变量!";	
    
    	public void sub(){
    		out.println("SubClass类的sub()方法!");	
    	}
    		
    	//-重写
    	public void test(){
    		out.println("SubClass类覆写BaseClass类的test()方法");
    	}
    
    	public static void main(String[] args){
    		//-编译类型和运行类型完全一样,不存在多态
    		BaseClass b=new BaseClass();
    		out.println(b.book);
    		b.base();
    		b.test();
    
    		//-编译类型和运行类型完全一样,不存在多态
    		SubClass s=new SubClass();
    		out.println(s.book);
    		s.sub();
    		s.test();
    
    		//-编译类型和运行类型不一样,出现多态:
    		//-编译类型为BaseClass类,运行类型为SubClass类
    		BaseClass bs=new SubClass();
    		//-变量在程序编译时,已经由编译类型确定,所以这里输出BaseClass 类中的book变量:6
    		out.println(bs.book);
    		//-方法的调用在程序编译时,由运行类型指定,所以这里调用的是SubClass类中继承自BaseClass类中的base()方法
    		bs.base();
    		//-方法的调用在程序编译时,由运行类型指定,所以这里调用的是SubClass类中覆写的base()方法
    		bs.test();
    		//-BaseClass类中不存在sub()方法,编译时就会报错,编译不通过
    		//bs.sub();
    	}
    	
    }
    

    运行结果:

    总结:

    1、java引用变量有两种类型:编译时类型、运行时类型

    2、编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象类型决定

    3、如果编译时类型和运行时类型不一致,就出现了所谓的多态

    如上代码所示,在声明bs变量的时候:

    BaseClass bs:声明bs的类型为BaseClass类型

    =new SubClass():赋给bs的对象类型为SubClass类型

    所以 bs这个对象就存在多态!!!

    3.1、变量:由编译类型决定

    3.2、方法:编译阶段只能调用编译类型所具有的方法,运行时则执行运行类型所执行的方法

  • 相关阅读:
    python实例
    date命令
    unbuntu禁用ipv6
    Oracle学习(一)
    深入浅出区块链笔记
    sqlserver索引
    Go学习(16):网络编程
    Go学习(15):并发与包
    Go学习(14):defer
    Go学习(13):异常
  • 原文地址:https://www.cnblogs.com/baby-zhude/p/8035079.html
Copyright © 2011-2022 走看看