Java面向对象_多态性、instanceof关键字

一、多态

分类:方法的重载与重写;对象的多态性

对象的多态性向上转型:将子类实例转为父类实例   格式:父类 父类对象=子类实例;是自动转换

                    向下转型:将父类实例转为子类实例   格式:子类 子类对象=(子类)父类实例;是强制转换

小结:方法的重载与重写就是方法多态性表现;多个子类就是父类中的多种形态;父类引用可以指向子类对象,自动转换;子类对象指向父类引用需要强制转换;在实际开发中尽量使用父类引用(更利于扩展)

父类设计法则:父类通常情况下都设计为抽象类或接口,其中优先考虑接口,如接口不能满足才考虑抽象类

                    一个具体的类尽可能不去继承另一个具体类,这样的好处是无需检查对象是否为父类的对象

二、instanceof关键字

通过这个关键字可以很方便的检查对象的类型,但如果一个父类的子类过多,这样判断就显得繁琐,所以产生了上面的父类设计法则。

通常在子类中存在父类中没有的方法,而要用父类引用调用时会用到这个关键字进行判断(一般不建议出现此类情况)

 1 public class Practice14 {
 2     
 3     public static void main(String[] args) {
 4         // TODO Auto-generated method stub
 5         //用父类的引用指向子类对象
 6         Cat cat=new YeCat();//自动转换
 7         
 8         //把父类引用转换为子类对象,有可能发生类型转换异常
 9         //instanceof检查对象是否为某个类型
10         if(cat instanceof HomeCat){
11         HomeCat h=(HomeCat)cat;}//强制转换
12         print(cat);
13 }    
14     //体现多态,只有在真正使用时才知道是谁跑
15     public static void print(Cat c){
16         c.run();
17     }
18 }
19 //抽象类
20 abstract class Cat{
21     public abstract void run();
22 }
23 
24 class HomeCat extends Cat{
25     public void run(){
26         System.out.println("跑的慢");
27     }
28 }
29 
30 class YeCat extends Cat{
31     public void run(){
32         System.out.println("跑的快");
33     }
34 }
原文地址:https://www.cnblogs.com/shenhainixin/p/5067196.html