向上转型和向下转型

向上转型和向下转型

相同点:

如果子类重写了父类的方法,调用的是子类中重写的方法。

不同点:

向上转型只能调用与父类引用中父类相同的方法,不能调用子类自定义方法;

向下转型可以调用父类的方法,也能调用子类自定义方法;

 示例:

public class test01 {
    public static void main(String[] args) {
        //向上转型
        Parent p=new Children();
        p.eat();
        p.sleep();
        //p.play();不能通过编译
        //向下转型
        Children c=(Children) p;
        c.sleep();
        c.sleep("hi");
        c.play();
    }
}
​
class Parent {
    //定义两个方法
    public void sleep(){
        System.out.println("Parent.sleep");
    }
    public void eat(){
        System.out.println("Parent.eat");
    }
}
​
class Children extends Parent {
    //重载父类sleep()方法
    public void sleep(String str){
        System.out.println(str+",Children.sleep");
    }
    //重写父类sleep()方法
​
    @Override
    public void sleep() {
        super.sleep();
        System.out.println("Children.sleep");
    }
    //子类自定义方法
    public void play(){
        System.out.println("Children.play");
    }
}

 

结果:

Parent.eat

Parent.sleep

Children.sleep

Parent.sleep

Children.sleep

hi,Children.sleep

Children.play

posted @ 2021-06-21 21:22  小jun学java  阅读(366)  评论(0)    收藏  举报