Java语言的多态性

Posted 寻觅beyond

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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语言的多态性的主要内容,如果未能解决你的问题,请参考以下文章

Java语言的多态性

java中封装,继承,多态,接口学习总结

Java中的多态

Java中的多态

Java语言基础28-29--接口与多态

Java中的继承和多态