Java 上转型对象(父类、本类方法的调用)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhoukikoo/article/details/79942653

上转型对象

父类 Father.java

package com.ggsddu.base.transition;

public class Father {
    public void read() {
        System.out.println("父类say方法");
    }

    public void onlyFather() {
        System.out.println("父类方法,子类未重写此方法");
    }
}

子类 Son.java

package com.ggsddu.base.transition;

public class Son extends Father {
    @Override
    public void read() {
        System.out.println("子类重写say方法");
    }

    public void onlySon() {
        System.out.println("子类自己的方法,父类没有");
    }
}

测试一:

上转型对象utObj可以调用的方法:

  • 子类继承父类,重写的print()
  • 父类的方法(子类未重写)onlyFather()
  • 子类的方法(父类没有)onlySon()

这里写图片描述
示例代码:

@Test
public void test() {
    Father utObj = new Son();
    utObj.print();
    utObj.onlyFather();
    ((Son) utObj).onlySon();// 上转型对象类型可以强转为子类类型
}

打印结果:

子类重写父类say方法
父类方法,子类未重写此方法
子类定义方法,父类中没有

测试二:

父类对象可以调用的方法:

这里写图片描述
这里写图片描述

示例代码:

@Test
public void testFather() {
    Father father = new Father();
    father.print();
    father.onlyFather();

    // 下面类型转换,运行时报类型转换异常:java.lang.ClassCastException
    Son son = (Son) father;// 父类类型对象强转为子类类型,编译正常,运行错误!
    son.onlySon();
}

小结:

上转型对象

  • 可以调用子类重写父类的方法
  • 可以调用子类定义的独有的方法(这是肯定的)
  • 可以调用父类的方法(子类继承父类,但是未重写的方法)(此处上转型对象类型需要墙砖为子类类型,此处另一个结论就是:上转型对象可以转换为子类类型!父类对象不行!)
  • 父类对象类型强转为子类类型时,编译期正常,但是运行时会报类型转换异常!

猜你喜欢

转载自blog.csdn.net/zhoukikoo/article/details/79942653