Java每日一题20170310

作者: weknow | 来源:发表于2017-03-10 08:40 被阅读50次

    因简书改版后无法添加扩展链接,20170309问题解析请到公众号查看,问题解析在公众号首发,公众号ID:weknow619。

    package Mar2017;
    
    public class Ques0310 {
    
        static void test() {
            System.out.println("test method in Test class");
        }
        
        public static void main(String[] args) {
            Ques0310 test = new Ques0310();
            test.test();
            Sub sub = new Sub();
            sub.test();
            test = sub;
            test.test();
            sub = test;
            sub.test();
        }
    }
    
    class Sub extends Ques0310 {
        static void test() {
            System.out.println("test method in Sub class");
        }
    }
    

    今日问题:
    请问主程序运行结果是什么?

    注:weknow团队近期开通并认证了分答,欢迎大家收听,有问题也欢迎到分答来咨询哦,回见您!!

    748537-0a2c0f3ca15d5dc5.png

    相关文章

      网友评论

      • imhuster:首先,引用有两种类型,表面类型(ApparentType)与(实际类型)ActualType
        表面类型为声明时的类型,实际类型为对象产生时的类型
        程序中的test的表面类型一直是父类Ques0310,sub的表面类型一直是子类
        ,所以赋值语句sub = test;必须要强转,否则会因为向下转型而在编译时报错。
        2.对于非静态方法,根据实际类型来执行,而静态方法是根据表面类型来执行
        3.当然需要注意的是这里的test方法并非重写而是隐藏
        总上所述,该程序无法编译成功。如果 加上强转 eg: sub = (Sub) test; 则程序依次调用父类,子类,父类,子类的test方法。(ps:程序中的test的表面类型一直是父类Ques0310,sub的表面类型一直是子类。手机打字真是麻烦,要是能够输入语音就好了:smile: )
        weknow:这样很好,都是互相学习讨论
        imhuster:话说我这样剧透会不会被打:flushed:

      本文标题:Java每日一题20170310

      本文链接:https://www.haomeiwen.com/subject/ryhegttx.html