Java序谈之多态知识

何谓多态?

多态是一种事物的不同表现形态

Java中多态实现的条件是什么?

1、类与类之间存在继承关系

2、子类和父类之间有重写方法

3、父类引用指向子类对象

多态在Java中的体现是什么?

一个父类或许有多个子类,其中都重写了父类的方法,之后父类引用即可直接执行子类复写的方法

多态有什么好处和弊端?

好处:1、基于继承,便于维护代码 2、增强代码的扩展性 3、父类不能调用子类的特殊方法

多态时候的成员变量和成员函数的区别?

成员变量:无论编译还是运行都看父类的变量

成员函数:编译看父类的成员方法,运行看子类的成员方法

代码示例:

public class Demo02多态变量方法调用 {
	public static void main(String[] args) {
		Father f = new Son();//用到这两个类,将他们加载进方法区
		System.out.println(f.num);
		f.speak();
	}
}
class Father{
	int num = 10;
	public void speak() {
		System.out.println("Father 说");
	}
}
class Son extends Father{
	int num = 20;
	public void speak() {
		System.out.println("Son说");
	}
}
结果是:

10

Father说

多态实例使用代码,向上、向下转型

public static void fun(WuQi w) {
		w.hit();
		//判断传进来的参数属于哪个类的  instanceof 可以判断是哪个类的对象  w是否属于刀类
		if(w instanceof Dao) {
			Dao dao = (Dao)w;
			dao.lianDao();
		}else if (w instanceof Jian){
			Jian jian = (Jian)w; 
			jian.lianJian();
		}
	}
}
class WuQi{
	public void hit() {
		System.out.println("挥舞武器");
	}
}
class Dao extends WuQi{
	public void hit() {
		System.out.println("挥刀");
	}
	public void lianDao() {
		System.out.println("练刀");
	}
}
class Jian extends WuQi{
	public void hit() {
		System.out.println("挥剑");
	}
	public void lianJian() {
		System.out.println("耍剑");
	}
}

分析:

向上转型:WuQi  a = new Dao( );

向下转型:Dao b = ( Dao )a;

main函数中使用了instanceof关键字,判断new Dao()是否是Dao类的对象

你可能感兴趣的:(Java)