现在的位置: 首页 > 综合 > 正文

java中的多态(Polymorphism)

2018年01月30日 ⁄ 综合 ⁄ 共 1066字 ⁄ 字号 评论关闭

今天看完李刚老师的《疯狂java讲议》,才终于弄明白面向对象的多态概念,分享一下:

//多态(Polymorphism)

多态:相同类型的引用变量,调用同一个方法时呈现出多种不同的行为特征。
对象的实例变量不具备多态性。
Java引用变量有两个类型:编译时类型,运行时类型
编译时类型由声明该变量时使用的类型决定
运行时类型由实际赋给该变量的对象决定

如果编译时类型和运行时类型不一致,就可能出现多态(Polymorphism)

//实例,多态
class BClass{
	public int book=6;
	public void base(){
		System.out.println("父类的普通方法");
	}
	public void test(){
		System.out.println("父类的被覆盖的方法");
	}
}
public class SClass extends BClass{
	public String book="轻量级Java EE";
	public void test(){
		System.out.println("子类覆盖父类的方法");
	}
	public void sub(){
		System.out.println("子类的普通方法");
	}
	public static void main(String[] args){
		BClass bc=new BClass();
		System.out.println(bc.book);
		bc.base();
		bc.test();
		SClass sc=new SClass();
		System.out.println(sc.book);
		sc.base();
		sc.test();
		//编译时类型(BClass)和运行类型(SClass)不一样,多态发生
		BClass ploymophicBc=new SClass();
		System.out.println(ploymophicBc.book);
		ploymophicBc.base();
		ploymophicBc.test();//BClass类型的ploymophicBc调用的是子类的test()方法,与同样是BClass类型的bc调用父类test()方法不同,表现出面向对象的多态特征。
		//BClass类没有提供sub()方法,下句报错
		//ploymophicBC.sub();//可以通过反射来执行该方法
/*
---------- 运行Java程序 ----------
6
父类的普通方法
父类的被覆盖的方法
轻量级Java EE
父类的普通方法
子类覆盖父类的方法
6
父类的普通方法
子类覆盖父类的方法

输出完毕 (耗时 1 秒) - 正常终止
*/
	}
}

抱歉!评论已关闭.