对象多态与instanceof关键字

多态
定义:同一行为具有多个不同变现形式或形态的能力。

多态性在Java中有两种体现形式:
1、方法的重载与覆写。
2、对象的多态。

对象的多态有两种类型:
1、向上转型:父类 父类对象=new 子类实例。
对象发生向上转型后,所调用的方法一定是被子类覆写过的方法。

public class PolDemo01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//像上转型
		A a=new B();
		a.fun1();
	}

}
class A{
	public void fun1() {
		System.out.println("A——>fun1()");
	}
}
class B extends A{
	public void fun1() {
		System.out.println("B——>fun1()");
	}
	public void fun2() {
		System.out.println("B——>fun2()");
	}
}
//结果:
//B——>fun1()

2、向下转型——能调用子类自己的定义的方法。
先进行对象向上转型,才能进行对象的向下转型。

public class PolDemo02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		A a=new B();
		B b=(B)a;
		b.fun1();
		b.fun2();
	}

}
class A{
	public void fun1() {
		System.out.println("A——>fun1()");
	}
}
class B extends A{
	public void fun1() {
		System.out.println("B——>fun1()");
	}
	public void fun2() {
		System.out.println("B——>fun2()");
	}
}
//结果:
//B——>fun1()
//B——>fun2()

instanceof关键字
作用:判断一个对象是哪个类的实例。
建议在进行对象转型前优先使用instanceof进行判断。

public class InstanceofDemo02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		fun(new B());	//传递B类实例,产生向上转型
	}
	public static void fun(A a) {	//此方法可以分别调用各自子类单独定义的方法
		a.fun1();
		if(a instanceof B) {	//判断是否是B类实例
			B b=(B)a;			//进行向下转型
			b.fun1();
			b.fun2();
		}
	}

}
class A{
	public void fun1() {
		System.out.println("A——>fun1()");
	}
}
class B extends A{
	public void fun1() {
		System.out.println("B——>fun1()");
	}
	public void fun2() {
		System.out.println("B——>fun2()");
	}
}
//B——>fun1()
//B——>fun1()
//B——>fun2()

在类设计时永远不要去继承一个已经实现好的类。而是去继承抽象类或去实现接口。

你可能感兴趣的:(Java)