首页 > 代码库 > Java语言的多态性
Java语言的多态性
用简单的话来描述Java:编译类型与运行类型不一致的时候就会出现多态!
下面一段代码可以用来描述Java多态
class BaseClass{ public String flag="父类的flag"; public BaseClass(){ System.out.println("父类无参构造函数被调用"); } public void base(){ System.out.println("父类的base方法"); } public void test(){ System.out.println("父类的test方法"); } } class SubClass extends BaseClass{ public String flag="子类的flag"; public String flag2="子类的flag2"; public SubClass(){ System.out.println("子类无参构造函数"); } public void test(){ System.out.println("子类的test方法"); } public void exam(){ System.out.println("子类的exam方法"); } } public class Test{ public static void main(String[] args){ BaseClass bc=new BaseClass(); System.out.println(bc.flag); bc.test(); // 输出: // 父类无参构造函数被调用 // 父类的flag // 父类的test方法 SubClass sc=new SubClass(); System.out.println(sc.flag); sc.test(); sc.exam(); // 输出: // 父类无参构造函数被调用 // 子类的flag // 子类无参构造函数 // 子类的test方法 // 子类的exam方法 BaseClass X=new SubClass(); System.out.println(X.flag); // System.out.println(X.flag2);//错误 X.base(); X.test(); // X.exam();//报错 没有为类型 BaseClass 定义方法 exam() // 输出: // 父类无参构造函数被调用 // 子类无参构造函数 // 父类的flag // 父类的base方法 // 子类的test方法 } }
上面代码中,对象实例 X 的编译类型为BaseClass,运行类型为SubClass
在运行的时候
一、实例对象可以调用的方法要满足
1、该方法必须是父类中(即编译类型)包含的方法,子类(即运行类型)特有的方法(新添加的方法)不可以被调用。
2、当调用方法时,表现出来的是子类方法的特征(如子类将父类中的方法改写了,则输出改变以后的内容),否则依旧输出父类原内容
二、实例对象调用变量的原则
1、与上面第一条相同
2、访问该变量的时候,访问的始终是父类的变量,而非子类的变量,与调用方法的第二点相反
Java语言的多态性
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。