zoukankan      html  css  js  c++  java
  • CS 61B Lab5

    其实我不太确定题目是否是这个意思,我就按照我的理解来答题,欢迎来讨论。

    part one    

    a b c d 答案都在以下代码中

    分析:array的情况和variable情况是一样的,除了代码中array 的cast有点点不一样。。。在compile过程中,array之间相互assign看的是static type,type一致或者是子类assign给了父类或者父类cast成子类之后assign给子类,这三种情况是可以通过compile time的。但是在run time过程中,看的是dynamic type,必须要一致,才能run。所以在d中最后,Dog type 的 twodogs 指向了 Teddy type,如此一来,在最后cast过后,就既能通过compile time,又能run起来了。

    package lab5;
    
    public class Dog{
        protected int legs;
        protected String voice;
        protected String name;
        Dog(){
            legs = 4;
            voice = "wang";
            name = "dog";
        }
    /**************************************************************/
        public static void main(String[] arg){
            Dog onedog;
            Teddy oneTed = new Teddy();
            onedog = oneTed;
    //        oneTed = onedog;    compile error
            oneTed = (Teddy)onedog;
            
            onedog = new Dog();
    //        oneTed = (Teddy)onedog;         runtime error
            
            
    /**************************************************************/        
            
            Dog[] Twodogs;
            Teddy[] TwoTeddy=new Teddy[2];
            
    
            TwoTeddy[0] = new Teddy();
            TwoTeddy[1] = new Teddy();
            
            Twodogs = TwoTeddy;
    //        TwoTeddy = Twodogs;//compile error;
            TwoTeddy = (Teddy[])Twodogs;
            
            Twodogs = new Dog[2];
    //        TwoTeddy = (Teddy[])Twodogs;        runtime error
            
    /**************************************************************/
            Twodogs = new Teddy[2];
            Twodogs = TwoTeddy;
    //        TwoTeddy = Twodogs;  compile error
            TwoTeddy = (Teddy[])Twodogs; // there is no run error or compile error
                    
        }
    }

     

    Part Two

    (a) java will compile the result

    package lab5;
    
    public interface Animals {
         public void Shout();
    }
    
    
    
    package lab5;
    
    public class Dog{
        protected int legs;
        protected String voice;
        protected String name;
        Dog(){
            legs = 4;
            voice = "wang";
            name = "dog";
        }
        public void Shout(){
            System.out.println(voice);
        }
    }

    (b)NO

    (c)NO

      (d) Yes

    Part Three

    (a)Yes, there is no difference.

      (bc)  the situation is like this below. 

    Part Four

    (a) call the subclass method

    (b) run time error

    (c)课上讲过的方法 用super调用superclass method

  • 相关阅读:
    参数模型和非参数模型
    windows上安装第二个mysql
    Mysql 连接数,最大并发数设置
    mybatis 一次执行多条sql
    微信小程序发布新版本的小程序之后,从发现-小程序中启动,还是看的到旧版本。[转]
    Fragment调用startActivityForResult导致的回调Activity无法获取正确的requestId的问题
    不可重入锁和可重入锁
    Android gradle 各种版本下载
    android 各国语言对应的缩写
    解决乱码setCharacterEncoding("UTF-8")不生效的问题
  • 原文地址:https://www.cnblogs.com/developerchen/p/7201790.html
Copyright © 2011-2022 走看看