• 封装和继承作业


    封装和继承作业

    一、    选择题

     

    1.

    使用权限修饰符( B   )修饰的类的成员变量和成员方法,可以被当前包中所有类访问,也可以被它的子类(同一个包以及不同包中的子类)访问。(选择一项)

     

     

     

     

    A

    public

     

    B.

    protected

     

    C.

    默认

     

    D.

    private

    2.

    给出如下代码,如何使成员变量m被方法fun()直接访问(  C  )。(选择一项)

     

    class Test {

             private int m;

             public static void fun() {

             }

    }

     

     

     

     

    A

    将private int m 改为protected int m

     

    B.

    将private int m 改为public int m

     

    C.

    将private int m 改为static int m

     

    D.

    将private int m 改为int m

    3.

    以下关于继承条件下构造方法执行过程的代码的执行结果是(  A  。(选择一项)

     

    class Person {       

             public Person() {

                      System.out.println("execute Person()");

             }

    }

    class Student extends Person { 

             public Student() {        

                      System.out.println("execute Student() ");

             }      

    }

    class PostGraduate extends Student {      

             public PostGraduate() {      

                      System.out.println("execute PostGraduate()");

             }      

    }

    public class TestInherit {

             public static void main(String[] args) {

                      new PostGraduate();            

             }

    }

     

     

     

     

    A.

    execute Person()

    execute Student()

    execute PostGraduate()

     

    B.

    execute PostGraduate()

     

    C.

    execute PostGraduate()

    execute Student()

    execute Person()

     

    D.

    没有结果输出

    4.

    以下关于thissuper关键字的说法错误的是(    BD。(选择二项)

     

     

     

     

    A.

    this关键字指向当前对象自身,super关键字指向当前对象的直接父类

     

    B.

    在main方法中可以存在this或super关键字,但不能同时存在。

     

    C.

    this和super关键字都可以访问成员属性,成员方法和构造方法

     

    D.

    在一个类的构造方法中可以同时使用this和super来调用其他构造方法

    5.

    给出下面的代码段,在代码说明//assignment x=a,y=b处写入如下( D   )个代码是正确的。(选择一项)

     

    public class Base {

             int w, x, y, z;

             public Base(int a, int b) {

                      x = a;

                      y = b;

             }

             public Base(int a, int b, int c, int d) {

                      // assignment x=a,y=b

                      w = d;

                      z = c;

             }

    }

     

     

     

     

    A

    Base(a,b);

     

    B.

    x=a,y=b;

     

    C.

    this(a),this(b);

     

    D.

    this(a,b)

    6.

    以下Java程序编译运行后的输出结果是()。(选择一项)

     

    class HelloA {

             public HelloA( ) {

                      System.out.println("HelloA");

             }

             {   System.out.println("I'm A class");

             }

     

             static {

                      System.out.println("static A");

             }

    }

    public class HelloB extends HelloA {

             public HelloB( ) {

                      System.out.println("HelloB");

             }

             {   System.out.println("I'm B class");

             }

             static {

                      System.out.println("static B");

             }

             public static void main(String[] args) {

                      new HelloB( );

             }

    }

     

     

     

     

    A

    static A

    static B

    I'm A class

    HelloA

    I'm B class

    HelloB

    C.

    static A

    I'm A class

    HelloA

    static B

    I'm B class

    HelloB

     

    B.

    static A

    static B

    I'm A class

    I'm B class

    HelloA

    HelloB

    D

    static A

    static B

    HelloA

    HelloB

    I'm A class

    I'm B class

    7.

    下列选项中关于Javasuper关键字的说法正确的是(   AD  )。(选择二项)

     

     

     

     

    A

    super关键字是在子类对象内部指代其父类对象的引用

     

    B.

    super关键字不仅可以指代子类的直接父类,还可以指代父类的父类

     

    C.

    子类通过super关键字只能调用父类的方法,而不能调用父类的属性

     

    D.

    子类通过super关键字可以调用父类的构造方法

    二、    判断题

    1. 使用public修饰的成员属性和方法可以被当前项目中所有包的所有类访问。( T  )
    2. 类的方法通常设为public,而类的实例变量一般也设为public。(F    )
    3. 与未加访问控制符的缺省情况相比,public和protected修饰符扩大了类及其属性和方法的被访问范围,private修饰符则缩小了这种范围。( T )
    4. 访问权限是private的变量,只能在本类和与本类同一个包中的其他类使用。(   F )
    5. 如果定义一个类时没有使用extends,则它的父类是java.lang.Object。( T   )
    6. 对子类实例化对象需要调用超类的构造函数进行初始化工作,完成对子类中的超类实例变量的初始化,则子类可以继承超类的构造函数。(F )
    7. 在Java中任何一个子类的构造方法都必须调用其父类的构造方法(包括隐式调用),并且调用父类的构造方法的语句必须是子类构造方法的第一条语句。(   F)
    8. Java中的类不允许多重继承,一个类只能有有一个直接父类。(T)
    9. Object类有一个public方法是toString( ),一个对象通过调用该方法可以获得该对象的字符串表示。(  T  )
    10. 运算符“==”用于比较引用时,如果两个引用指向内存同一个对象,则返回true。(  T  )

     

    三、    简答题

    1. private、默认、protected、public四个权限修饰符的作用.

        访问修饰符:可以修饰变量,方法,类

                  修饰变量:四种修饰符都能使用

                  修饰方法:四种修饰符都能使用

                  修饰类:2种  public,default

    1. 方法重载和方法重写(覆盖)的区别。.

      (1)方法重载:存在一个类中

                           方法名必须相同

                           参数列表不同(参数个数,类型,顺序不同)

                           与返回值无关

             (2)方法重写:存在子父类中,子类把父类的方法重写一遍

                            返回值,方法名,参数列表必须一致

                            子类的访问修饰符要大于等于父类的访问修饰符 

    1. java.lang.Object类的六个常用方法的声明并说明其作用。

        Object类有一个默认构造方法pubilcObject(),在构造子类实例时,都会先调用这个默认构造方法。    

        equals()方法:用于测试某个对象是否同另一个对象相等。它在Object类中的实现是判断两个对象是否指向同一块内存区域。

        toString():返回该对象的字符串表示。Object类中的toString()方法会打印出类名和对象的内存位置。几乎每个类都会覆盖该方法,以便打印对该对象当前状态的表示。

    f    inalize

        protected void finalize()

                         throws Throwable

        当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。子类重写 finalize 方法,以配置系统资源或执行其他清除。

        wait

        public final void wait()

                    throws InterruptedException

        导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。换句话说,此方法的行为就好像它仅执行 wait(0) 调用一样。

        notify

        public final void notify()

        唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。选择是任意性的,并在对实现做出决定时发生。线程通过调用其中一个 wait 方法,在对象的监视器上等待。

    1. 继承条件下子类构造方法的执行过程

            1、子类的构造过程中必须调用其基类的构造方法。

        2、子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法

             2.1、使用this(argument_list)调用本类的另外构造方法。

             2.2、如果调用super,必须写在子类构造方法的第一行。

        3、如果子类的构造方法中没有显示的调用基类的构造方法,则系统默认调用基类的无参数构造方法。

        4、如果子类构造方法中既没有显示调用基类构造方法,而基类又没有无参数的构造方法,则编译出错。

    1. super关键字的作用和使用

          super子类可以通过它调用父类的方法      写在构造方法的第一行

    1. ==和equals()的联系和区别

        1.基本数据类型

        也称原始数据类型。byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值。 

        2.复合数据类型(类) 

          当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。

          对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。

    四、    编码题

    1. 以面向对象的思想,编写自定义类描述IT从业者。设定属性包括:姓名,年龄,技术方向,工作年限, 工作单位和职务;方法包括:工作

    要求:

        1)        设置属性的私有访问权限,通过公有的get,set方法实现对属性的访问

        2)        限定IT从业人员必须年满15岁,无效信息需提示,并设置默认年龄为15。

        3)        限定“技术方向”是只读属性

        4)        工作方法通过输入参数,接收工作单位和职务,输出个人工作信息

        5)        编写测试类,测试IT从业者类的对象及相关方法(测试数据信息自定义)

      1 public class IT {
      2     private String name;
      3     private int age;
      4     private String tend;
      5     private int workAge;
      6     private String workPlace;
      7     private String job;
      8 
      9     // 无参构造器
     10     public IT() {
     11         super();
     12         // TODO Auto-generated constructor stub
     13     }
     14 
     15     // 有参构造器
     16     public IT(String name, int age, String tend, int workAge, String workPlace, String job) {
     17         super();
     18         this.name = name;
     19         this.age = age;
     20         this.tend = tend;
     21         this.workAge = workAge;
     22         this.workPlace = workPlace;
     23         this.job = job;
     24     }
     25 
     26     // get,set方法
     27     public String getName() {
     28         return name;
     29     }
     30 
     31     public void setName(String name) {
     32         this.name = name;
     33     }
     34 
     35     public int getAge() {
     36         return age;
     37     }
     38 
     39     public void setAge(int age) {
     40         if (age <= 15) {
     41             this.age = 15;
     42             System.out.println("年龄无效,默认值是15");
     43         } else {
     44             this.age = age;
     45         }
     46     }
     47 
     48     public String getTend() {
     49         return tend;
     50     }
     51 
     52     public void setTend(String tend) {
     53         this.tend = tend;
     54     }
     55 
     56     public int getWorkAge() {
     57         return workAge;
     58     }
     59 
     60     public void setWorkAge(int workAge) {
     61         this.workAge = workAge;
     62     }
     63 
     64     public String getWorkPlace() {
     65         return workPlace;
     66     }
     67 
     68     public void setWorkPlace(String workPlace) {
     69         this.workPlace = workPlace;
     70     }
     71 
     72     public String getJob() {
     73         return job;
     74     }
     75 
     76     public void setJob(String job) {
     77         this.job = job;
     78     }
     79 
     80     // 工作方法
     81     public void work() {
     82         System.out.println("姓名:" +name);
     83         System.out.println("年龄:" + age);
     84         System.out.println("技术方向: " + tend);
     85         System.out.println("工作年限: " + workAge);
     86         System.out.println("工作单位: " + workPlace);
     87         System.out.println("职务: " + job);
     88     }
     89 
     90 }
     91 public class test {
     92     public static void main(String[] args) {
     93         IT t = new IT("马未龙", 35, "数据库维护", 10, "腾讯实业", "数据库维护工程师");
     94         t.work();
     95         System.out.println("--------------------");
     96         IT t1 = new IT();
     97         t1.setName("张凯");
     98         t1.setAge(6);
     99         t1.setTend("Java开发");
    100         t1.setWorkAge(1);
    101         t1.setWorkPlace("鼎盛科技");
    102         t1.setJob("Java开发工程师");
    103         t1.work();
    104     }
    105 }

      2.编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,计算并分别显示圆半径、圆面积、圆周长,圆柱体的体积。(7分)

      提示:(1)编写一个圆类Circle,该类拥有:

      1)       一个成员变量,radius(私有,浮点型);//存放圆的半径;

      2)       两个构造方法

      Circle()              //将半径设为0

      Circle(double  r )    //创建Circle对象时将半径初始化为r

      3)       三个成员方法

      double getArea()      //获取圆的面积

      double getPerimeter()  //获取圆的周长

      void show()           //将圆的关径、周长、面积输出到屏幕

                      (2) 编写一个圆柱体类Cylinder,它继承于上面的Circle类。还拥有:

      1)       一个成员变量,double hight  (私有,浮点型);  //圆柱体的高;

      2)       构造方法

      //创建Cylinder对象时将半径初始化为r,高度初始化为h

      Cylinder(double r,double h)    

      3)       成员方法

      double getVolume()            //获取圆柱体的体积

      void showVolume()             //将圆柱体的体积输出到屏幕

     1 public class Circle {
     2     double radius;
     3 
     4     // 无参构造器
     5     public Circle() {
     6        this.radius=0;
     7     }
     8 
     9     // 有参构造器
    10     public Circle(double r) {
    11         this.radius = r;
    12     }
    13     
    14     //获取圆的面积
    15     public double getArea(){
    16         double s = Math.PI*this.radius*this.radius;
    17         return s;
    18     }
    19     
    20     //获取圆的周长
    21     public double getPerimeter(){
    22         double c = 2*Math.PI*this.radius;
    23         return c;
    24     }
    25     
    26   //将圆的半径、周长、面积输出到屏幕
    27     public void show(){
    28       System.out.println("圆的半径是:"+this.radius);
    29       System.out.print("圆的周长是:");
    30       System.out.printf("%.2f",getPerimeter());
    31       System.out.print("
    圆的面积是:");
    32       System.out.printf("%.2f",getArea());
    33     }
    34 }
    35 public class Cylinder extends Circle {
    36     double hight;// 圆柱体的高
    37 
    38     public Cylinder(double r, double h) {
    39         super(r);
    40         this.hight = h;
    41     }
    42 
    43     // 获取圆柱体的体积
    44     public double getVolume() {
    45         double s = super.getArea();
    46         double v =s*this.hight;
    47         return v;
    48     }
    49     
    50     //将圆柱体的体积输出到屏幕
    51     public void showVolume(){
    52         System.out.print("
    圆柱的体积是:");
    53         System.out.printf("%.2f",getVolume());
    54     }
    55 }
    56 public class test {
    57     public static void main(String[] args) {
    58         Cylinder c = new Cylinder(3, 6);
    59         Circle ci = new Circle(5);
    60         ci.show();
    61         c.showVolume();
    62     }
    63 }

      3.某公司要开发新游戏,请用面向对象的思想,设计游戏中的蛇怪和蜈蚣精

      设定

      1)       蛇怪类:

      属性包括:怪物名字,生命值,攻击力

      方法包括:攻击,移动(曲线移动),补血(当生命值<10时,可以补加20生命值)

      2)       蜈蚣精类:

      属性包括:怪物名字,生命值,攻击力

      方法包括:攻击,移动(飞行移动)

      要求

      1)       分析蛇怪和蜈蚣精的公共成员,提取出父类—怪物类

      2)       利用继承机制,实现蛇怪类和蜈蚣精类

      3)       攻击方法,描述攻击状态。内容包括怪物名字,生命值,攻击力

      4)       编写测试类,分别测试蛇怪和蜈蚣精的对象及相关方法

      5)       定义名为mon的包存怪物类,蛇怪类,蜈蚣精类和测试类

     1 public class Monster {
     2     String name;
     3     int healthpoint;// 生命值
     4     int Attack;// 攻击力
     5 
     6     public String getName() {
     7         return name;
     8     }
     9 
    10     public int getHealthpoint() {
    11         return healthpoint;
    12     }
    13 
    14     public int getAttack() {
    15         return Attack;
    16     }
    17 
    18     public void setName(String name) {
    19         this.name = name;
    20     }
    21 
    22     public void setHealthpoint(int healthpoint) {
    23         this.healthpoint = healthpoint;
    24     }
    25 
    26     public void setAttack(int attack) {
    27         this.Attack = attack;
    28     }
    29     
    30     //攻击
    31     public void attack(){
    32         System.out.println("怪物"+getName()+"展开攻击");
    33         System.out.println("当前的生命值是:"+getHealthpoint());
    34         System.out.println("攻击力是:"+getAttack());
    35     }
    36      //移动
    37     public void move(){}
    38     
    39 
    40 }
    41 public class Snake extends Monster {
    42     //补血(当生命值<10时,可以补加20生命值)
    43     public void addHP(){
    44         if(getHealthpoint()<10){//当生命值<10时,可以补加20生命值
    45             healthpoint = getHealthpoint()+20;
    46             System.out.println("施展大蛇补血术。。。。。当前的生命值是:"+healthpoint);
    47         }
    48         
    49     }
    50     
    51     //方法重写-重写父类move();
    52     public void move(){
    53         System.out.println("我是蛇怪,我走S行线路!");
    54     }
    55     
    56     
    57 }
    58 public class Centipede extends Monster {
    59     // 方法重写-重写父类move();
    60     public void move() {
    61         System.out.println("我是蜈蚣精,我御风飞行!");
    62     }
    63 }
    64 public class test {
    65     public static void main(String[] args) 
    66         // 创建蛇对象
    67         Snake s = new Snake();
    68         s.setName("金蛇怪");
    69         s.setHealthpoint(1);
    70         s.addHP();
    71         s.setAttack(100);
    72         s.attack();
    73         s.move();
    74         // 创建蜈蚣对象
    75         System.out.println();
    76         Centipede ce = new Centipede();
    77         ce.setName("紫衣蜈蚣");
    78         ce.setHealthpoint(30);
    79         ce.setAttack(70);
    80         ce.attack();
    81         ce.move();
    82     }
    83 }

    五、    可选题

    1. 以面向对象的思想,编写自定义类描述图书信息。设定属性包括:书名,作者,出版社名,价格;方法包括:信息介绍

      要求:

      1)       设置属性的私有访问权限,通过公有的get,set方法实现对属性的访问

      2)       限定介格必须大于10,如果无效进行提示

      3)       设计构造方法实现对属性赋值

      4)       信息介绍方法描述图书所有信息

      5)       编写测试类,测试图书类的对象及相关方法(测试数据信息自定)

    ublic class BookInformation {
        private String name;
        private String author;
        private String publish;
        private double price;
    
        public String getName() {
            return name;
        }
    
        public String getAuthor() {
            return author;
        }
    
        public String getPublish() {
            return publish;
        }
    
        public double getPrice() {
            return price;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setAuthor(String author) {
            this.author = author;
        }
    
        public void setPublish(String publish) {
            this.publish = publish;
        }
    
        public void setPrice(double price) {
            this.price = price;
        }
    
        //书信息介绍
        public void introduce() {
          System.out.println("书名:"+getName());
          System.out.println("作者:"+getAuthor());
          System.out.println("出版社:"+getPublish());
          System.out.println("价格:"+getPrice()+"元");
        }
        public static void main(String[] args) {
            BookInformation b1 = new BookInformation();
            b1.setName("鹿鼎记");
            b1.setAuthor("金庸");
            b1.setPublish("人民出版社");
            b1.setPrice(120);
            b1.introduce();
            System.out.println("======================");
            BookInformation b2 = new BookInformation();
            b2.setName("绝代双骄");
            b2.setAuthor("古龙");
            b2.setPublish("中国长安出版社");
            b2.setPrice(55);
            b2.introduce();
        }
    
    }

      2.请用面向对象的思想,设计自定义类描述演员和运动员的信息

      设定

      1)       演员类:

      属性包括:姓名,年龄,性别,毕业院校,代表作

      方法包括:自我介绍

      2)       运动员类:

      属性包括:姓名,年龄,性别,运动项目,历史最好成绩

      方法包括:自我介始

      要求

      3)       分析演员和运动员的公共成员,提取出父类—人类

      4)       利用继承机制,实现演员类和运动员类

      5)       编写测试类,分别测试人类,演员类和运动员类对象及相关方法

      6)       定义名为act的包存人类,演员类,运动员类和测试类

      1 public class People {
      2     private String name;
      3     private int age;
      4     private String sex;
      5 
      6     public String getName() {
      7         return name;
      8     }
      9 
     10     public int getAge() {
     11         return age;
     12     }
     13 
     14     public String getSex() {
     15         return sex;
     16     }
     17 
     18     public void setName(String name) {
     19         this.name = name;
     20     }
     21 
     22     public void setAge(int age) {
     23         this.age = age;
     24     }
     25 
     26     public void setSex(String sex) {
     27         this.sex = sex;
     28     }
     29     
     30     //公共方法-自我介绍
     31     public void introduce(){
     32         System.out.println("大家好!我是:"+getName());
     33         System.out.println("今年"+getAge() +"岁");
     34         System.out.println("我是一个"+getSex()+"生");
     35     }
     36 }
     37 
     38 public class Sportsman extends People {
     39     private String project;
     40     private String grade;
     41 
     42     public String getProject() {
     43         return project;
     44     }
     45 
     46     public String getGrade() {
     47         return grade;
     48     }
     49 
     50     public void setProject(String project) {
     51         this.project = project;
     52     }
     53 
     54     public void setGrade(String grade) {
     55         this.grade = grade;
     56     }
     57     
     58     public void title(){
     59         System.out.println("我是一个普通的小老百姓");
     60         System.out.println("=====================");
     61     }
     62     //运动员介绍-运动项目,历史最好成绩
     63     public void infor(){
     64         System.out.println("我最擅长的运动项目是:"+getProject()+"短跑");
     65         System.out.println("历史最好的成绩是:"+getGrade());
     66     }
     67 
     68 }
     69 public class Actor extends People{
     70     private String graduate;
     71     private String representative;
     72 
     73     public String getGraduate() {
     74         return graduate;
     75     }
     76 
     77     public String getRepresentative() {
     78         return representative;
     79     }
     80 
     81     public void setGraduate(String graduate) {
     82         this.graduate = graduate;
     83     }
     84 
     85     public void setRepresentative(String representative) {
     86         this.representative = representative;
     87     }
     88     
     89     //演员介绍-毕业院校,代表作
     90     public void info() {
     91         System.out.println("毕业院校:"+getGraduate());
     92         System.out.println("代表作:"+getRepresentative());
     93     }
     94     
     95     public void title1(){
     96         System.out.println("=====================");
     97     }
     98 }
     99 
    100 public class test {
    101     public static void main(String[] args) {
    102         //运动员对象
    103         Sportsman s = new Sportsman();
    104         s.setName("刘小翔");
    105         s.setAge(23);
    106         s.setSex("男");
    107         s.setProject("200");
    108         s.setGrade("22秒30");
    109         s.title();
    110         s.introduce();
    111         s.infor();
    112         
    113         //演员对象
    114         Actor a = new Actor();
    115         a.setName("章衣");
    116         a.setAge(27);
    117         a.setSex("女");
    118         a.setGraduate("北京电影学院");
    119         a.setRepresentative("《寄往天国的家书》");
    120         a.title1();
    121         a.introduce();
    122         a.info();
    123     }
    124    
    125   
    126 }
  • 相关阅读:
    【Flutter学习】页面布局之基础布局组件
    【Flutter学习】基本组件之AppBar顶部导航栏
    【Flutter学习】基本组件之BottomNavigationBar底部导航栏
    开发日记:JsonCSharpHelp
    会议抢订
    C# WinForm 技巧十: winfrom 全屏自适应屏幕分辨率
    阿里云 轻量应用服务器(LAMP) 使用日志记录
    常见模块设计--权限管理(auth)
    PHP获取项目所有控制器方法名称
    想要开发自己的PHP框架需要那些知识储备?
  • 原文地址:https://www.cnblogs.com/topshark/p/10251886.html
Copyright © 2020-2023  润新知