• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

多态

开发技术 开发技术 7小时前 1次浏览

多态

一个对象拥有多种形态,这就是:对象的多态性

代码当中的多态性,其实就是一句话:父类引用指向子类对象。
格式:
父类名称 对象名=new 子类名称();
Fu obj=new Zi(); 左侧父类的引用,指向了右侧子类的对象。
obj.method();先在Zi类中找方法,有就用它,没有再向上找。

或者:
接口名称 对象名=new 实现类名称();

多态中访问成员变量

  1. 直接通过对象名称访问:看等号左边是谁,优先用谁,没有则向上找
  2. 间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则往上找
package test;

public class Fu {
    
    int num=10; 
    
    public void showNum(){
        System.out.println(num);
    }
    public void method(){
        System.out.println("父类方法");
    }
    public void methodFu(){
        System.out.println("父类特有的方法");
    }
}



package test;

public class Zi extends Fu {

    int num=20;
    
    public void method() {
        System.out.println("子类方法");      
    }
    
    /*@Override//如果覆盖重写了父类方法,这时候该方法就属于自己了,输入num就是20
    public void showNum() {
        System.out.println(num);*/
    }
}


package test;

public class MyClass {
    public static void main(String[] args) {
        Fu obj=new Zi();
        obj.method();//子类方法
        obj.methodFu();//父类特有的方法
        System.out.println(obj.num);//10;等号左边是Fu,所以先在Fu类中找
        obj.showNum();//子类没有覆盖重写,就是F父,10

    }
}

在多态的代码中,成员方法的访问规则是:看new的是谁,就优先用谁,没有则向上找。
口诀:编译看左,运行看右。

对比:

成员变量:编译看左边,运行还看左边。
成员方法:编译看左边,运行看右边。颠三倒四


对象的向上转型:其实就是多态写法 父类名称 对象名=new 子类对象();
Animal animal=new car();创建了一只猫,当做动物看待。
含义:右侧创建一个子类对象,把它当做父类来看待使用。

注意:向上转型一定是安全的。从小范围转向了大范围。但是一旦向上转型为父类,那么无法调用子类原有的特有方法。
解决办法:向下转型还原为子类。

对象的向下转型:其实是一个【还原】动作。 格式:子类名称 对象名=(子类名称) 父类对象;
Cat cat= (Cat) animal;本来是猫,已经被当做动物了,还原回来成为本来的猫。
含义:将父类对象还原成为本来的子类对象。
注意:

  • 必须保证对象本来创建的时候,就是猫,才能向下转型成为猫。
  • 如果对象创建的时候本来不是猫,现在非要向下转型成为猫,就会报错【classC astException】。

instanceof关键字

对象 instanceof 类名称:得到一个boolean值,判断前面的对象能否做后面类型的实例。


程序员灯塔
转载请注明原文链接:多态
喜欢 (0)