Java的面向对象

12-向下转型与多态

2021-07-06 594 0

简介 在面向对象中向下转型往往配合instanceof关键字,向上转型就是多态的体现

有了对象的多态后, 父类的引用不能直接调用子类特有的属性和方法,但是内存中是有子类特有的属性和方法的,那如何解决呢?


强制类型转换 ,向下转型,结合 instanceof的使用

upfile


instanceof关键字的使用

a instanceof A:判断对象a是否是类A的实例。如果是,返回true;如果不是,返回false。

使用情境:为了避免在向下转型时出现 ClassCastException 的异常,在向下转型之前,先进行instanceof的判断,一旦返回true,就进行向下转型。如果返回false,不进行向下转型。


如果 a instanceof A返回true,a instanceof B也返回true,那么类A和类B存在子父类关系。

开发中向下转型用的少, 用的最多的是向上转型


代码展示:

//Person.java
package com.ylaihui.oop8;

public class Person {
    	public void walk(){
    		System.out.println("Person walk()....");
    	}
}
//Man.java
package com.ylaihui.oop8;

public class Man extends Person {
    	public void smooking(){
    		System.out.println("Man smooking()...");
    	}
}
//Women.java
package com.ylaihui.oop8;

public class Women extends Person {
    	public void goShop(){
    		System.out.println("Women goShop()...");
    	}
}
//PersonTest.java
package com.ylaihui.oop8;

public class PersonTest {
    	public static void main(String[] args) {
    		Person p = new Man();
    		
    		Man m = (Man)p;
    		m.smooking();
		
		// java.lang.ClassCastException
//		Women w = (Women)p;
//		w.goShop();
		
		// 为了解决以上异常, 使用 instanceof 判断
		if(p instanceof Man) {
			Man m1 = (Man)p;
			m.smooking();
		}
		if(p instanceof Women) {
			Women w1 = (Women)p;
			w1.goShop();
		}
		if(p instanceof Person) {
			System.out.println("p is Person");
		}
		if(p instanceof Object) {
			System.out.println("p is Object");
		}
	}
}


代码输出

Man smooking()...

Man smooking()...

p is Person

p is Object


点赞 0

文章评论

欢迎您:

纸上得来终觉浅,绝知此事要躬行!

112 文章 57794 浏览 3 评论

联系我

  •   QQ:    361352119
  •  Email:  lisimmy@sina.com
  • 微信: