• 7.17LJY


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

    一、选择题

    1.    Person类和Test类的代码如下所示,则代码中的错误语句是(  C  )。(选择一项)
        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.    以下代码中错误的语句是(    D )。(选择一项)
        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的抽象类和抽象方法说法正确的是(AC    )。(选择二项)
            
        A    抽象类中可以含有0个或多个抽象方法
        B.    抽象类中不可以有构造方法
        C.    一个类中若有抽象方法,则这个类必为抽象类
        D.    子类必须重写父类所有的抽象方法

    5.    在Java中关于abstract关键字,以下说法正确的是(  AB  )。(选择两项)
            
        A    abstract类中可以没有抽象方法
        B.    abstract类的子类也可以是抽象类 
        C.    abstract方法可以有方法体
        D.    abstract类可以创建对象

    6.    以下选项可替换题目中//add code here而不产生编译错误的是(  AD  )。(选择二项)
        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.    以下选项中关于匿名内部类的说法正确的是(  B C  )。(选择二项)
            
        A.    匿名内部类可以实现多个接口,或者继承一个父类
        B.    匿名内部类不能是抽象类,必须实现它的抽象父类或者接口里包含的所有抽象方法
        C.    匿名内部类没有类名,所以匿名内部类不能定义构造方法
        D.    匿名内部类可以直接访问外部类的所有局部变量

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

    三、简答题
    1.final和abstract关键字的作用。
    *Final修饰变量,变量变常量,修饰方法,方法无法被重写,修饰类,类无法被继承
    *abstract修饰的类是不能有实例的,修饰的方法也没有方法体
    2.接口和抽象类的联系和区别。
    * 抽象类,是对类进行抽象,如植物,是用来继承的,里面会有植物的共性,
    *接口就像是一种功能,有的植物可以光合作用,有的可以结果,谁有功能谁就可以通过实现的方式,对其进行进一步的完善,是对功能的一种扩展
    抽象类(和普通类相比,只是可以多定义了抽象方法而已)
            * 成员变量:可以变量,也可以常量
            * 构造方法:有
            * 成员方法:可以抽象,也可以非抽象
        * 接口:
            * 成员变量:只可以常量
            * 构造方法:无
            * 成员方法:只可以抽象
    * B:关系区别
        * 类与类
            * 继承,单继承,多层继承
        * 类与接口:
            * 实现,单实现,多实现
        * 接口与接口多继承
            * 继承,单继承,
    * C:设计理念区别
        * 抽象类 被继承体现的是:"is a"的关系.抽象类中定义的是该继承体系的共性功能
        * 接口   被实现体现的是:"like a "的关系.接口中定义的是该继承体系的扩展功能.

    3.内部类的类型及其特点。
    成员内部类,局部内部类俩种,匿名内部类,静态内部类

    在内部类中可以随意使用外部类的成员方法以及成员变量,即使这些类成员被修饰为private。
    内部类的实例一定要绑定在外部类的实例上,如果在外部类中初始化一个内部类对象,那么内部类对象就会绑定在外部类对象上。内部类初始化方式与其他类初始化方式相同。都是new关键字。

    静态内部类:在内部类前添加修饰符static,这个内部类就变为静态内部类。一个静态内部类中可以声明static成员,但是在非静态内部类中不可以声明静态成员。
    特点:
    不可以使用外部类的非静态成员,所以静态内部类在程序开发中很少见。
    创建静态内部类的对象,不需要其外部类的对象。
    不能从静态内部类的对象中访问非静态外部类的对象。

    匿名内部类:不给内部类取名字,直接以对象名来代替。匿名内部类的所有实现代码都需要在大括号之间进行编写。

    4.介绍Java垃圾回收机制。
    垃圾收集器的工作目标是回收已经无用的对象的内存空间,从而避免内存渗漏体的产生,节省内存资源,避免程序代码的崩溃。 

    垃圾收集器判断一个对象的内存空间是否无用的标准是:如果该对象不能再被程序中任何一个"活动的部分"所引用,此时我们就说,该对象的内存空间已经无用。所谓"活动的部分",是指程序中某部分参与程序的调用,正在执行过程中,尚未执行完毕。 

    3.垃圾收集器线程虽然是作为低优先级的线程运行,但在系统可用内存量过低的时候,它可能会突发地执行来挽救内存资源。当然其执行与否也是不可预知的。 

    4.垃圾收集器不可以被强制执行,但程序员可以通过调用System. gc方法来建议执行垃圾收集器。 

    四、编码题
    1.编写程序描述兔子和青蛙
    需求说明:使用面向对象的思想,设计自定义类描述兔子和青蛙。
    实现思路及关键代码
    1)分析兔子和青蛙的共性
    2)根据共性,定义抽象的动物类
    属性:名字、颜色、类别(哺乳类、非哺乳类)
    方法:吃饭,发出叫声
    3)根据青蛙会游泳 抽象游泳的接口
    方法:游泳
    4)定义兔子继承动物类,青蛙继承动物同时实现游泳接口
    程序运行结果如图所示。


    public class Test1 {

        public static void main(String[] args) {
            Animal r = new Rabbet("兔子小妹","白色","哺乳类");
            show(r);
            Animal f = new Frog("忍者神龟","原谅色","蛋生的");
            show(f);
        }
        
        public static void show(Animal a) {
            System.out.println("这是一只" + a.getName() + "颜色是" + a.getColor() + "类别为" + a.getKind());
            System.out.print("喜欢") ;
            a.shout() ; a.eat();
            if (a.getName() == "忍者神龟") {
                Frog frog = (Frog)a ;
                frog.swim();
            }
        
        
        }
    }


    public abstract class Animal {
                private String name;
                /*
                 需求说明:使用面向对象的思想,设计自定义类描述兔子和青蛙。
                    实现思路及关键代码
                    1)分析兔子和青蛙的共性
                    2)根据共性,定义抽象的动物类
                    属性:名字、颜色、类别(哺乳类、非哺乳类)
                    方法:吃饭,发出叫声
                    3)根据青蛙会游泳 抽象游泳的接口
                    方法:游泳
                    4)定义兔子继承动物类,青蛙继承动物同时实现游泳接口
                    程序运行结果如图所示。
                 
                 */
                private String color;
                private String kind;
                public Animal() {
                    super();
                    
                }
                public Animal(String name, String color, String kind) {
                    super();
                    this.name = name;
                    this.color = color;
                    this.kind = kind;
                }
                public String getName() {
                    return name;
                }
                public void setName(String name) {
                    this.name = name;
                }
                public String getColor() {
                    return color;
                }
                public void setColor(String color) {
                    this.color = color;
                }
                public String getKind() {
                    return kind;
                }
                public void setKind(String kind) {
                    this.kind = kind;
                }
                public abstract void eat() ;
                
                public abstract void shout() ;
                    
                    
                
    }

    public interface Swim {
            public abstract void  swim();
    }


    class Rabbet extends Animal {

        public Rabbet() {
            
        }

        public Rabbet(String name, String color, String kind) {
                    super(name, color, kind);
        
        }

        
        public void eat() {
            System.out.println("爱吃胡萝卜");
            
        }

        
        public void shout() {
            System.out.print("GGG");
        }

    }

     class Frog extends Animal implements Swim {

        public Frog() {

        }

        public Frog(String name, String color, String kind) {
            super(name, color, kind);

        }

        
        public void swim() {
        
                System.out.println("青蛙可以游泳");
        }


        public void eat() { 
            System.out.print("青蛙吃蚊子");
        

        }

        
        public void shout() {
            System.out.print("呱呱呱");

        }

    }




    2.编写程序描述影视歌三栖艺人
    需求说明:请使用面向对象的思想,设计自定义类,描述影视歌三梄艺人。
    实现思路及关键代码
    1)分析影视歌三栖艺人的特性
    a)可以演电影
    b)可以演电视剧
    c)可以唱歌
    2)定义多个接口描述特性
    a)演电影的接口-----方法:演电影
    b)演电视剧的接口-----方法:演电视剧
    c)唱歌的接口-----方法:唱歌
    3)定义艺人类实现多个接口
    程序运行结果如图2所示。
    class Test2 {
        public static void main(String[] args) {
            
            /*需求说明:请使用面向对象的思想,设计自定义类,描述影视歌三梄艺人。
            实现思路及关键代码
            1)分析影视歌三栖艺人的特性
            a)可以演电影
            b)可以演电视剧
            c)可以唱歌
            2)定义多个接口描述特性
            a)演电影的接口-----方法:演电影
            b)演电视剧的接口-----方法:演电视剧
            c)唱歌的接口-----方法:唱歌
            3)定义艺人类实现多个接口
            */
            ThreeActor a = new ThreeActor("杨幂");
            System.out.println("我叫" + a.name);
            a.movie();
            a.sing();
            a.tv();

        }
    }

    interface Movie {
        public abstract void movie();
    }

    interface Sing {
        public abstract void sing();
    }

    interface Tv {
        public abstract void tv();
    }

    class ThreeActor implements Movie ,Sing , Tv {
        String name;
        public ThreeActor() {}
        public ThreeActor(String name) {
            this.name = name;
        }
        
        public void movie() {
            System.out.println("我能拍电影");
        }

        public void sing() {
            System.out.println("我能唱歌");
        }
        
        public void tv() {
            System.out.println("我能拍电视剧");
        }

    }





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

    实现思路及关键代码
    1)定义PCI接口,具有传送数据send()方法
    2)定义显卡VideaCard类,实现该接口
    3)定义声卡AudioCard类,实现PCI接口
    4)定义网卡NetCard类,实现PCI接口
    5)定义测试类,让显卡、声卡、网卡发送数据

    package Homework;

    public class Test {

        public static void main(String[] args) {
        /*1.实现不同符合PCI规范的适配器
            需求说明:PCI是一种规范,所有实现了该规范的适配器,必如显卡、声卡、网卡都可以安装到PCI插槽上并工作。模拟实现该功能。
            
            实现思路及关键代码
            1)定义PCI接口,具有传送数据send()方法
            2)定义显卡VideaCard类,实现该接口
            3)定义声卡AudioCard类,实现PCI接口
            4)定义网卡NetCard类,实现PCI接口
            5)定义测试类,让显卡、声卡、网卡发送数据*/
            new VideaCard().transmit();
            new AudioCard().transmit();
            new Netcard().transmit();
            
        }

    package Homework;

    public interface PCI {
        public abstract void transmit();
            
    }

    package Homework;

    public class VideaCard implements PCI {

        public void transmit() {
            System.out.println("显卡传输功能");
        
        }

    }

    package Homework;

    public class AudioCard implements PCI {

        
        public void transmit() {
            System.out.println("声卡传输功能");
            
        }

    }

    package Homework;

    public class Netcard implements PCI {

        
        public void transmit() {
            System.out.println("网卡传输功能");

        }

    }





    2.实现不同引用类型对象的大小比较
    需求说明:学生类,新闻类,商品类虽然是完全不同的类,但是都具有比较的能力,比如可以比较两个学生的大小,但需要指定比较的依据是学号、姓名还是成绩等。
    实现思路及关键代码:
    将比较的能力定义为接口,让学生、新闻、商品类都实现该接口。
    1)定义接口Comparable,其中包含唯一的方法int compareTo(Object obj);返回值>0,表示大于,返回值=0,表示等于,返回值<0,表示小于。
    2)定义学生类,包括学号、姓名、年龄和分数,实现Comparable接口,按照分数倒序排列;
    3)定义新闻类,包括编号(int类型)、标题、内容和点击数,实现Comparable接口,按照编号正序排列;
    4)定义测试类,分别创建两个学生对象、新闻对象,进行比较并输出结果。


    package Homework;

    public class Test1 {

        public static void main(String[] args) {
            /*
             * 实现不同引用类型对象的大小比较
            需求说明:学生类,新闻类,商品类虽然是完全不同的类,但是都具有比较的能力,比如可以比较两个学生的大小,但需要指定比较的依据是学号、姓名还是成绩等。
                实现思路及关键代码:
                将比较的能力定义为接口,让学生、新闻、商品类都实现该接口。
                1)定义接口Comparable,其中包含唯一的方法int compareTo(Object obj);返回值>0,表示大于,返回值=0,表示等于,返回值<0,表示小于。
                2)定义学生类,包括学号、姓名、年龄和分数,实现Comparable接口,按照分数倒序排列;
                3)定义新闻类,包括编号(int类型)、标题、内容和点击数,实现Comparable接口,按照编号正序排列;
                4)定义测试类,分别创建两个学生对象、新闻对象,进行比较并输出结果。
             */
                Student s1 = new Student(11,"张三",22,88);
                Student s2 = new Student(13,"Jack",21,66);
                int result = s1.CompareTo(s2.getScore());
                if (result >  0) {
                    System.out.println(s1.getNum() + s1.getName() + s1.getAge() +s1.getScore() );
                    System.out.println(s2.getNum() + s2.getName() + s2.getAge() + s2.getScore());
                    
                }else if (result == 0) {
                    System.out.print(s2.getNum() + s2.getName() + s2.getAge() + s2.getScore() + "-------------");
                
                   System.out.println(s1.getNum() + s1.getName() + s1.getAge() +s1.getScore() );
                }else{
                    System.out.println(s2.getNum() + s2.getName() + s2.getAge() + s2.getScore());
                    System.out.println(s1.getNum() + s1.getName() + s1.getAge() +s1.getScore() );
                }
                
                News n1 = new News(1,"北京发水","震惊",888);
                News n2 = new News(2,"日本地震","骇人",666);
                result = n1.CompareTo(n2.getNum());
                
                if (result >  0) {
                    System.out.println(n2.getNum() + n2.getHead() + n2.getContent() +n2.getHits() );
                    System.out.println(n1.getNum() + n1.getHead() + n1.getContent() +n1.getHits());
                    
                }else if (result == 0) {
                    System.out.print(n2.getNum() + n2.getHead() + n2.getContent() +n2.getHits() + "-------------");
                
                   System.out.println(n2.getNum() + n2.getHead() + n2.getContent() +n2.getHits() );
                }else{
                    System.out.println(n1.getNum() + n1.getHead() + n1.getContent() +n1.getHits());
                    System.out.println(n2.getNum() + n2.getHead() + n2.getContent() +n2.getHits());
                }
                
                
                
                
        }

    }

    package Homework;

    public interface Comparable {
                public abstract int CompareTo(int i);

    }

    package Homework;

    public class Student implements Comparable{
        //包括学号、姓名、年龄和分数,实现Comparable接口,按照分数倒序排列;
        private int num;
        private String name;
        private int age;
        private int score;
        
        
        public Student() {
            super();
        
        }


        public Student(int num, String name, int age, int score) {
            super();
            this.num = num;
            this.name = name;
            this.age = age;
            this.score = score;
        }


        public int getNum() {
            return num;
        }


        public void setNum(int num) {
            this.num = num;
        }


        public String getName() {
            return name;
        }


        public void setName(String name) {
            this.name = name;
        }


        public int getAge() {
            return age;
        }


        public void setAge(int age) {
            this.age = age;
        }


        public int getScore() {
            return score;
        }


        public void setScore(int score) {
            this.score = score;
        }
        
        public  int CompareTo(int score ) {
            if (this.score >  score) {
                return 1;
            }else if (this.score ==  score) {
                return 0;
            }else return -1;
            
        }
        

        
        

    }

    package Homework;

    public class News implements Comparable {
    //3)包括编号(int类型)、标题、内容和点击数,实现Comparable接口,按照编号正序排列;
            private    int num;
            private String head;
            private String content;
            private int hits;
            
            
        
        public News(int num, String head, String content, int hits) {
                super();
                this.num = num;
                this.head = head;
                this.content = content;
                this.hits = hits;
            }



        public News() {
                super();
                
            }
        
        



        public int getNum() {
            return num;
        }



        public void setNum(int num) {
            this.num = num;
        }



        public String getHead() {
            return head;
        }



        public void setHead(String head) {
            this.head = head;
        }



        public String getContent() {
            return content;
        }



        public void setContent(String content) {
            this.content = content;
        }



        public int getHits() {
            return hits;
        }



        public void setHits(int hits) {
            this.hits = hits;
        }



        public  int CompareTo(int num) {
                if (this.num > num) {
                return 1;
                }else if (this.num == num) {
                return 0;
                }else return -1;
            
        }

    }

  • 相关阅读:
    MapReduce-文本输入
    MapReduce-输入分片与记录
    python 常用类库
    python leveldb 文档
    火狐插件推荐
    mweb test
    python代码风格规范
    UNICODE,GBK,UTF-8区别
    机器学习之K近邻算法(KNN)
    python中的StringIO模块——html
  • 原文地址:https://www.cnblogs.com/lijuenyi/p/9323413.html
Copyright © 2020-2023  润新知