• 7.17 作业 韩宗轩


     

    抽象类+接口+内部类作业题

    一、    选择题

    1.

    Person类和Test类的代码如下所示,则代码中的错误语句是( B   。(选择一项)

     

    public class Person {

             public String name;

             public Person(String name) {

                       this.name = name;

             }

    }

    public class Test {

        public static void main(String[] args) {

            final Person person = new Person("欧欧");

            person.name = "美美";

            person = new Person("亚亚");

        }

    }

     

     

     

     

    A.

    final Person person = new Person("欧欧");

     

    B.

    person.name = "美美";

     

    C.

    person = new Person("亚亚");

     

    D.

    没有错误

    2.

    如下Java代码运行的结果是(   B )。(选择一项)

     

    public class Test {

             final int age;

             public Test(){

                       age=10;

             }

             public static void main(String[ ] args) {

                       System.out.println(new Test().age);

             }

    }

     

     

     

     

    A

    输出:0

     

    B.

    输出:10

     

    C.

    输出:null

     

    D.

    运行时出现异常

    3.

    以下代码中错误的语句是( B   )。(选择一项)

     

    public class Something{

             public static void main(String[] args){

                       final Other o=new Other();

                       new Something().addOne(o);//1

             }

             public void addOne( Other o){

                       o.i++;//2

                       o =  new Other();//3

             }

    }

    class Other{

             public int i;

    }

     

     

     

     

    A

    1

     

    B.

    2

     

    C.

    3

     

    D.

    没有错误

    4.

    下列选项中,关于Java的抽象类和抽象方法说法正确的是(A C    )。(选择二项)

     

     

     

     

    A

    抽象类中可以含有0个或多个抽象方法

     

    B.

    抽象类中不可以有构造方法

     

    C.

    一个类中若有抽象方法,则这个类必为抽象类

     

    D.

    子类必须重写父类所有的抽象方法

    5.

    Java中关于abstract关键字,以下说法正确的是(  AB  )。(选择两项)

     

     

     

     

    A

    abstract类中可以没有抽象方法

     

    B.

    abstract类的子类也可以是抽象类

     

    C.

    abstract方法可以有方法体

     

    D.

    abstract类可以创建对象

    6.

    以下选项可替换题目中//add code here而不产生编译错误的是(  BD  )。(选择二项)

     

    public abstract class MyClass{

             public int constInt=5;

             //add code here

             public void method( ){

             }

    }

     

     

     

     

    A

    public abstract void method(int a);

     

    B.

    constInt =constInt+5;

     

    C.

    public int method( );

     

    D.

    public abstract void anotherMethod( );

    7.

    Java接口中,下列选项中属于有效的方法声明是(   AC  )。(选择二项)

     

     

     

     

    A

    public void aMethod( );

     

    B.

    final void aMethod( );

     

    C.

    void aMethod(){ }

     

    D.

    private void aMethod( );

    8.

    以下选项中关于匿名内部类的说法正确的是(  AC   )。(选择二项)

     

     

     

     

    A.

    匿名内部类可以实现多个接口,或者继承一个父类

     

    B.

    匿名内部类不能是抽象类,必须实现它的抽象父类或者接口里包含的所有抽象方法

     

    C.

    匿名内部类没有类名,所以匿名内部类不能定义构造方法

     

    D.

    匿名内部类可以直接访问外部类的所有局部变量

    二、    判断题(共20个题目,总计10分)

    1. 声明为final的类不能是超类。(  T  )
    2. 使用final修饰的变量将变成常量,其中不能再被改变;使用final修饰的方法将无法被子类重载;使用final修饰的类将无法再被其他类继承。(   T )
    3. 抽象方法不能含有方法体,并且必须定义在抽象类中。(  T  )
    4. 抽象类是指在class前加使用abstract关键字修饰,且可以存在抽象方法和普通方法的类。(  T  )
    5. 接口中只有常量,没有变量;只有抽象方法,并且全部都是public方法。(  T  )
    6. 抽象类和接口都不能实例化,都没有构造方法。(  T  )
    7. 接口并不要求实现类和接口在概念本质上一致的,仅仅是实现了接口定义的约定或者能力而已。接口定义了“做什么”,而实现类负责完成“怎么做”,体现了功能(规范)和实现分离的原则。(   T )
    8. 内部类作为外部类成员,权限修饰符和其他成员一样,可声明为private、默认、protected或public。(  T )
    9. 匿名内部类适合创建那种只需要使用一次的类,它可以实现一个或多个接口,或者继承一个父类。(   T )
    10. 对于物理连接,比如数据库连接、输入流输出流、Socket连接等,垃圾回收机制无能为力,必须手动关闭才可以。( T  )
    11. 垃圾回收机制回收任何对象之前,总会先调用它gc( )方法,该方法是Object类提供的方法。不要主动调用某个对象的该方法,应该交给垃圾回收机制调用。( T   )

     

    三、    简答题

    1. final和abstract关键字的作用。

    都是状态修饰符

    final 是最终的 不可改变

    abstract 是抽象的 不可具体化

    1. 接口和抽象类的联系和区别。

    * A:成员区别

             * 抽象类(和普通类相比,只是可以多定义了抽象方法而已)

                       * 成员变量:可以变量,也可以常量

                       * 构造方法:有

                       * 成员方法:可以抽象,也可以非抽象

             * 接口:

                       * 成员变量:只可以常量 public static final

                       * 构造方法:无

                       * 成员方法:只可以抽象 public abstract

    * B:关系区别

             * 类与类

                       * 继承,单继承,多层继承

             * 类与接口:

                       * 实现,单实现,多实现

             * 接口与接口多继承

                       * 继承,单继承,

    * C:设计理念区别

             * 抽象类 被继承体现的是:"is a"的关系.抽象类中定义的是该继承体系的**共性功能**

             * 接口   被实现体现的是:"like a "的关系.接口中定义的是该继承体系的**扩展功能**.

    1. 内部类的类型及其特点。

    成员内部类和匿名内部类

        * a:内部类可以直接访问外部类的成员,包括私有。
        * b:外部类要访问内部类的成员,必须创建对象。
        * 外部类名.内部类名 对象名 = 外部类对象.内部类对象;

    1. 介绍Java垃圾回收机制。

    四、    编码题

    1. 编写程序描述兔子和青蛙

    需求说明:使用面向对象的思想,设计自定义类描述兔子和青蛙。

    实现思路及关键代码

    1)         分析兔子和青蛙的共性

    2)         根据共性,定义抽象的动物类

    属性:名字、颜色、类别(哺乳类、非哺乳类)

    方法:吃饭,发出叫声

    3)         根据青蛙会游泳 抽象游泳的接口

    方法:游泳

    4)         定义兔子继承动物类,青蛙继承动物同时实现游泳接口

    程序运行结果如图所示。

    class Workhzx1 {

           public static void main(String[] args) {

                  Animal r = new Rabbit("美人鱼","黑色","哺乳类");

                  r.sound();

                  r.eat();

                  System.out.println("-----------------");

                  Animal f = new Frog("大兵","绿色","非哺乳类");

                  f.sound();

                  f.eat();

                  Swiming frogSwim = (Swiming)f;

                  frogSwim.swim();

           }

    }

    /*

    1. 编写程序描述兔子和青蛙

    需求说明:使用面向对象的思想,设计自定义类描述兔子和青蛙。

    实现思路及关键代码

    1)   分析兔子和青蛙的共性

    2)   根据共性,定义抽象的动物类

    属性:名字、颜色、类别(哺乳类、非哺乳类)

    方法:吃饭,发出叫声

    3)   根据青蛙会游泳 抽象游泳的接口

    方法:游泳

    4)   定义兔子继承动物类,青蛙继承动物同时实现游泳接口

    程序运行结果如图所示。

    */

    abstract class Animal {

           private String name;

           private String color;

           private String type;

           public Animal(){}

           public Animal(String name,String color,String type){

                  this.name = name;

                  this.color = color;

                  this.type = type;

           }

           public void setName (String name){

                  this.name = name;

           }

           public String getName(){

                  return name;

           }

           public void setColor (String color){

                  this.color = color;

           }

           public String getColor(){

                  return color;

           }

           public void setType (String type){

                  this.type = type;

           }

           public String getType(){

                  return type;

           }

           public abstract void eat();

           public abstract void sound();

          

    }

    interface Swiming {

           public abstract void swim();

    }

    class Rabbit extends Animal {

           public Rabbit(){}

           public Rabbit(String name,String color,String type){

                  super (name,color,type);

           }

          

           public void sound(){

                  System.out.println("那只"+super.getColor()+"的,名叫"+super.getName()+"的兔子正在唧唧的叫");

           }

           public void eat (){

                  System.out.println("兔子是"+super.getType()+",爱吃胡萝卜");

                 

           }

    }

    class Frog extends Animal implements Swiming {

           public Frog(){}

           public Frog(String name,String color,String type){

                  super (name,color,type);

           }

           public void sound(){

                  System.out.println("那只"+super.getColor()+"的,名叫"+super.getName()+"的青蛙正在叽叽的叫");

           }

           public void eat (){

                  System.out.println("兔子是"+super.getType()+",爱吃昆虫");

                 

           }

           public void swim(){

                  System.out.println("虽然不是鱼,但青蛙也是咏叹高手");

           }

    }

    1. 编写程序描述影视歌三栖艺人

    需求说明:请使用面向对象的思想,设计自定义类,描述影视歌三梄艺人。

    实现思路及关键代码

    1)         分析影视歌三栖艺人的特性

    a)         可以演电影

    b)         可以演电视剧

    c)         可以唱歌

    2)         定义多个接口描述特性

    a)         演电影的接口-----方法:演电影

    b)         演电视剧的接口-----方法:演电视剧

    c)         唱歌的接口-----方法:唱歌

    3)         定义艺人类实现多个接口

    程序运行结果如图2所示。

     

    public class Workhzx2 {

             public static void main(String[] args) {

                       Star a = new Star("马素素");

                       a.introduce();

                       a.actMovie();

                       a.actTv();

                       a.singSong();

             }

    }

     interface Movie {

             public void actMovie();

    }

     interface Tv {

             public void actTv();

    }

     interface Sing {

             public void singSong();

    }

     class Star implements Movie,Tv,Sing {

             private String name;

             public Star(){}

             public Star(String name){

                       this.name = name;

             }

             public void setName(String name){

                       this.name = name;

             }

             public String getName(){

                       return name;

             }

             public void actMovie(){

                       System.out.println("我能演电影");

             }

             public void actTv(){

                       System.out.println("我能演电视剧");

             }

             public void singSong(){

                       System.out.println("我会唱歌");

             }

             public void introduce(){

                       System.out.println("大家好,我是:"+this.name);

            

             }

    }

    五、    可选题

    1. 实现不同符合PCI规范的适配器

    需求说明:PCI是一种规范,所有实现了该规范的适配器,必如显卡、声卡、网卡都可以安装到PCI插槽上并工作。模拟实现该功能。

     

    实现思路及关键代码

    1)         定义PCI接口,具有传送数据send()方法

    2)         定义显卡VideaCard类,实现该接口

    3)         定义声卡AudioCard类,实现PCI接口

    4)         定义网卡NetCard类,实现PCI接口

    5)         定义测试类,让显卡、声卡、网卡发送数据

    public class Workhzx3 {

             public static void main(String[] args) {

                       PCI date1 = new VideaCard();

                       date1.send();

                       PCI date2 = new AudioCard();

                       date2.send();

                       PCI date3 = new NetCard();

                       date3.send();

             }

    }

     interface PCI {

             public void send();

    }

     class VideaCard implements PCI {

             public void send(){

                       System.out.println("让显卡发送数据");

             }

    }

     class AudioCard implements PCI{

             public void send(){

                       System.out.println("让声卡发送数据");

             }

    }

     class NetCard implements PCI {

             public void send(){

                       System.out.println("让网卡发送数据");

             }

    }

    1. 实现不同引用类型对象的大小比较

    需求说明:学生类,新闻类,商品类虽然是完全不同的类,但是都具有比较的能力,比如可以比较两个学生的大小,但需要指定比较的依据是学号、姓名还是成绩等。

    实现思路及关键代码:

    将比较的能力定义为接口,让学生、新闻、商品类都实现该接口。

    1)         定义接口Comparable,其中包含唯一的方法int compareTo(Object obj);返回值>0,表示大于,返回值=0,表示等于,返回值<0,表示小于。

    2)         定义学生类,包括学号、姓名、年龄和分数,实现Comparable接口,按照分数倒序排列;

    3)         定义新闻类,包括编号(int类型)、标题、内容和点击数,实现Comparable接口,按照编号正序排列;

    4)         定义测试类,分别创建两个学生对象、新闻对象,进行比较并输出结果。

    class Workhzx4 {

             public static void main(String[] args) {

                       //Student s1 = new Student(34,"分数",23,43);

                       Student s1 = new Student(3838,"天才",99,90);

                       Student s2 = new Student(8,"弱智",666,100);

                       if (s1.compareTo(s2)>0) {

                                System.out.println(s2.print());

                                System.out.println(s1.print());

                       }else  {

                                System.out.println(s1.print());

                                System.out.println(s2.print());

                       }

                       News n1 = new News(1001,"天上掉钱了","北京的上空洒下来了好几个亿的人民币",99999);

                       News n2 = new News(1041,"北京下大雨","室内的大雨持续了好几个月",777777);

                       if (n1.compareTo(n2)>0) {

                                System.out.println(n2.print());

                                System.out.println(n1.print());

                       }else  {

                                System.out.println(n1.print());

                                System.out.println(n2.print());

                       }

             }

    }

    interface Comparable {

             public int compareTo (Object obj);

    }

    class Student implements Comparable {

             private int num;

             private String name;

             private int age;

             private int mark;

             public Student (){}

             public Student (int num,String name,int age,int mark){

                       this.num = num;

                       this.name = name;

                       this.age = age;

                       this.mark = mark;

            

             }

            

             /*public void setNum(int num){

                       this.num = num;

             }

             public int getNum(){

                       return num;

             }

             public void setName(String name){

                       this.name = name;

             }

             public String getName(){

                       return name;

             }

             public void setAge(int age){

                       this.age = age;

             }

             public int getAge(){

                       return age;

             }

             public void setMark(int mark){

                       this.mark = mark;

             }

             public int getMark(){

                       return mark;

             }*/

             public int compareTo(Object obj){

                       Student other = (Student)obj;

                       if (this.mark>other.mark) {

                                return -1;

                       }else if (this.mark<other.mark) {

                                return 1;

                       }else{

                                return 0;

                       }

                      

                       }

                       public String print(){

                                return "学生的学号是:"+num+",学生的姓名是:"+name+",学生的年龄是:"+age+",学生的分数是:"+mark+"分";

             }

    }

    class News implements Comparable {

             private int nid;

             private String title;

             private String contents;

             private int type;

             public News (){}

             public News (int nid,String title,String contents,int type){

                       this.nid = nid;

                       this.title = title;

                       this.contents = contents;

                       this.type = type;

            

             }

             public int compareTo(Object obj){

                       News other = (News)obj;

                       return (this.nid - other.nid);

            

             }

             public String print(){

                                return"新闻的编号是:"+nid+",新闻的标题是:"+title+",新闻的内容是:"+contents+",新闻的点击数是:"+type+"次";

                       }

    }

  • 相关阅读:
    SA 的参数
    superobject中 JavaToDelphiDateTime的使用
    关于Linux下进程间使用共享内存和信号量通信的时的编译问题
    Linux匿名管道与命名管道
    C++复数四则运算的实现
    C++类编程(一)const的使用
    读书会思考与学期总结
    xenomai安装
    Xenomai 安装准备工作
    Xenomai
  • 原文地址:https://www.cnblogs.com/Hveritas/p/9326281.html
Copyright © 2020-2023  润新知