10.21动手动脑

自行编写代码测试以下特性,在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。

public class Haha{
    public static void main(String args[])
    {
        EF ef=new EF("张三");
        ef.fly();
    }

}
class ABC{
    private String name;

    public  ABC(String name)
    {
        this.name = name;
    }
    public void fly()
    {
        System.out.println("父类");
    }
}
class EF extends ABC{
    public EF(String name) {
        super(name);
        // TODO Auto-generated constructor stub
    }

    public void fly(){
        //super.fly();
        System.out.println("子类");
    }
}

public class dongshoudongnao 
{
    public static void main(String args[])
    {
        EF ef=new EF("张三");
        ef.fly();
    }

}
class ABC
{
    private String name;

    public  ABC(String name)
    {
        this.name = name;
    }
    public void fly()
    {
        System.out.println("父类");
    }
}
class EF extends ABC
{
    public EF(String name) {
        super(name);
        // TODO Auto-generated constructor stub
    }

    public void fly()
    {
        super.fly();
        System.out.println("子类");
    }
}

第一个是调用的父类的函数,

第二个是调用子类的函数;

第三个是将子类赋给父类,相当于调用的是子类;

第五个是将父类强制转化成子类;

下面哪一个会导致程序运行时错误?

m=d; d=m; d=(Dog)m; d=c; c=(Cat)m;

先进行自我判断,得出结论后,运行相关代码,看看你的判断是否正确。

          自我判断:"d=m","d=c"引起编译错误

                “c=(Cat)m”引起运行时错误

           原因:“d=m”编译错误是因为Mammal类是Dog类的父类,子类中的成员比父类的多,父类无法将子类初始化;

                     “d=c”编译错误是因为两者代表不同的类,不能给对方赋值;

                     “c=(Cat)m”会引起运行时错误是因为Dog类的对象d已将Mammal类的对象m初始化,m被转换为Dog类后不能再转换为Cat类。

原文地址:https://www.cnblogs.com/xjmm/p/11779325.html