Java多态表现:向上、向下转型

向上转型实现的父类的方法
向下转型实现的是子类和父类的方法

 Father {
    private String name;

    public String getName() {
        return this.name;
    }
    public void print() {
        System.out.println("父亲被覆写的方法");
    }

    public void print1() {
        System.out.println("父亲未被覆写的方法");
    }
}
class Son extends Father {
    private String name;

    public void print() {
        System.out.println("儿子覆写了的方法");
    }

    public void SonMethod() {
        System.out.println("son独有的方法");
    }
}
public class ReverObject {
    public static void main(String[] args) {
        //核心你使用的是哪一个子类(new在哪里),而且调用的方法是否被子类所覆写了。

        //这个时候父类只能调用父类非私有的方法,如果被覆写了就输出覆写的方法
        // 如果父类的方法没有被覆写的话输出的是父亲的方法
        Father father = new Son();
        father.print();//此时输出的是:"儿子覆写了的方法"
        father.print1();//输出的是:“父亲未被覆写的方法”

        //error 父类里面没有这个方法
        //father.SonMethod();

        //此时就继续向下转型,让父类可以调用子类的方法,也可以调用父类的方法
        if (father instanceof Son) {
            Son son = (Son) father;
            son.SonMethod();// son独有的方法
             son.print();//儿子覆写了的方法
             son.print1();//父亲未被覆写的方法
        }
    }
}

Father father = new Son();
father可以访问的是

  • 父类Father独有的public、protected方法,static修饰的方法可以访问,private方法不可以被访问
  • Son独有的但是父类没有的都不可以被访问
  • 本来要访问父类的方法,但是如果方法被Son覆写了那么father访问的就是覆写后的方法
    private方法永远无法被外界直接访问,被覆写
    总结
  1. 对象多态性的核心在于方法的覆写。
  2. 通过对象的向上转型可以实现接收参数的统一,向下转型可以实现子类扩充方法的调用(一般不操作向下转型,有安全隐患)。
  3. 两个没有关系的类对象是不能够进行转型的,在转型之前先进行instanceof看能否转型的判断一定会产生ClassCastException。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值