12

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

 

一、    选择题

 

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而不产生编译错误的是( A D  )。(选择二项)

 

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.

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

 

 

 

 

A.

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

 

B.

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

 

C.

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

 

D.

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

 

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

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

 

三、    简答题

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

final:修饰类,类不能被继承,修饰变量,变量就成为了常量,修饰方法,方法不能被重写。

abstract:修饰类为抽象类,抽象类必须被子类继承,子类(如果不是抽象类)必须重写抽象类中全部抽象方法。

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

A:成员区别
    * 抽象类(和普通类相比,只是可以多定义了抽象方法而已)
        * 成员变量:可以变量,也可以常量
        * 构造方法:有
        * 成员方法:可以抽象,也可以非抽象
    * 接口:
        * 成员变量:只可以常量
        * 构造方法:无
        * 成员方法:只可以抽象
* B:关系区别
    * 类与类
        * 继承,单继承,多层继承
    * 类与接口:
        * 实现,单实现,多实现
    * 接口与接口多继承
        * 继承,单继承,
* C:设计理念区别
    * 抽象类 被继承体现的是:"is a"的关系.抽象类中定义的是该继承体系的共性功能
    * 接口   被实现体现的是:"like a "的关系.接口中定义的是该继承体系的扩展功能.

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

内部类的类型有很多种,但主要有4种内部类

静态内部类:

.静态内部类是指被声明为static的内部类,不能访问外部类的普通成员变量,只能访问外部类中的静态成员变量和静态方法。

成员内部类:

    去掉关键字static就是成员内部类,可以自由的引用外部类的属性和方法。

局部内部类:

    局部内部类是指定义在一个代码块内的类,作用范围为其所在的代码块。局部类类似于局部变量一样,不能被public、protected、private以及static修饰,只能访问方法中定义为final类型的局部变量。

匿名内部类:

    局部内部类是指定义在一个代码块内的类,作用范围为其所在的代码块。局部类类似于局部变量一样,不能被public、protected、private以及static修饰,只能访问方法中定义为final类型的局部变量。

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

java中有自动的垃圾回收机制,通过finalize()回收。

 

四、    编码题

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

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

实现思路及关键代码

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

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

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

方法:吃饭,发出叫声

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

方法:游泳

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

程序运行结果如图所示。

代码:

class Test1_Animal {
    public static void main(String[] args) {
        Rabbit r = new Rabbit("美人","黑色的","哺乳类");
        System.out.print("那只"+r.getColor()+",名叫"+r.getName()+"的兔子正在");
        r.shout();
        System.out.print("兔子是"+r.getType()+",");
        r.eat();
        System.out.println("-------------------------------------");

        Frog f = new Frog("大兵","绿色的","非哺乳类");
        System.out.print("那只"+f.getColor()+",名叫"+f.getName()+"的青蛙正在");
        f.shout();
        System.out.print("青蛙是"+f.getType()+",");
        f.eat();
        f.swim();
    }
}

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  shout();

}

interface Swimming {                    //定义接口:扩展功能游泳
    public abstract void swim();
}

class Rabbit extends Animal {
    public Rabbit() {}
    public Rabbit(String name,String color,String type) {
        super(name,color,type);
    }

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

class Frog extends Animal implements Swimming {
    public Frog() {}
    public Frog(String name,String color,String type) {
        super(name,color,type);
    }
    public void eat() {
        System.out.println("爱吃昆虫");
    }
    public void shout() {
        System.out.println("呱呱的叫");
    }
    public void swim() {
        System.out.println("虽然不是鱼,但青蛙也是泳坛高手");
    }
}
  1. 编写程序描述影视歌三栖艺人

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

实现思路及关键代码

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

a)         可以演电影

b)         可以演电视剧

c)         可以唱歌

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

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

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

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

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

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

class Demo_Interface {
	public static void main(String[] args) {
		Artist a = new Artist();
		a.speech();
		a.performmovie();
		a.performtv();
		a.performsong();

	}
}

interface PerformMovie {
	public abstract void performmovie();
}

interface PerformTV {
	public abstract void performtv();
}

interface PerformSong {
	public abstract void performsong();
}


class Artist implements PerformMovie,PerformTV,PerformSong {
	public void performmovie() {
		System.out.println("我能演电影");
	}
	public void performtv() {
		System.out.println("我能演电视剧");
	}
	public void performsong() {
		System.out.println("我会唱歌");
	}
	public void speech(){
		System.out.println("大家好!我是马素素");
	}
}

  

posted @ 2018-07-17 17:03  Object,  阅读(376)  评论(0编辑  收藏  举报