0717作业

一、 选择题

 

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.

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

 

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的抽象类和抽象方法说法正确的是( BC   )。(选择二项)

 

 

 

 

A

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

 

B.

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

 

C.

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

 

D.

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

 

5.

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

 

 

 

 

A

abstract类中可以没有抽象方法

 

B.

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

 

C.

abstract方法可以有方法体

 

D.

abstract类可以创建对象

 

6.

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

 

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接口中,下列选项中属于有效的方法声明是(  AB )。(选择项)

 

 

 

 

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

 

三、 简答题

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

fina关键字的作用:

1.被final修饰的类不能被继承

2.被final修饰的变量,变成了常量,只能被赋值一次,不能更改

3.被final修饰的方法,方法不能被重写

abstract关键字的作用:修饰 抽象类和抽象方法

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

成员区别
抽象类(和普通类相比,只是可以多定义了抽象方法而已)
成员变量:可以变量,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:成员变量:只可以常量
   构造方法:无
   成员方法:只可以抽象
B:关系区别

类与类:继承,单继承,多层继承

类与接口:实现,单实现,多实现
接口与接口多继承:继承,单继承,
设计理念区别
抽象类 被继承体现的是:"is a"的关系.抽象类中定义的是该继承体系的共性功能
接口  被实现体现的是:"like a "的关系.接口中定义的是该继承体系的扩展功能.

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

内部类的主要类型:静态内部类、成员内部类、局部内部类、匿名内部类

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

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

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

匿名内部类,是一种没有类名的内部类,不使用关键字class、extends、implements,它必须继承其他类或实现其它接口。

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

 

一、 编码题

 

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

 

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

 

实现思路及关键代码

 

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

 

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

 

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

 

方法:吃饭,发出叫声

 

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

 

方法:游泳

 

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

 

程序运行结果如图所示。

 

 

public class Test1_Animal{
    public static void main(String[] args) {
    Rabbit r=new Rabbit("兔子","黑色的","哺乳类");
    r.cry();
    r.eat();
    System.out.println("------------");

    Frog f=new Frog("青蛙","绿色","哺乳类");
    f.cry();
    f.eat();
    f.swim();
    }
}

abstract class Animal {
      String name;
      String color;
      String sort;

    public Animal(){}
    public Animal(String name,String color,String sort){
        this.name=name;
        this.color=color;
        this.sort=sort;
    }

    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 setSort(String sort){
        this.sort=sort;
    }
    public String getSort(){
        return sort;
    }

    public abstract void eat();//吃饭
    public abstract void cry();//
}

interface Swimming {   //抽象游泳的接口
    public abstract void swim();
}

class Rabbit extends Animal {//兔子
    public Rabbit(){}
    public Rabbit(String name,String color,String sort){
        super(name,color,sort);
    }

    public void eat(){//吃饭
        System.out.println(name+"是"+sort+",爱吃胡萝卜");
    }
    public void cry(){//
        System.out.println("那只"+color+"的,名叫美人的"+name+"正在叽叽的叫");
    } 
}

class Frog extends Animal implements Swimming {//青蛙
    public Frog(){}
    public Frog(String name,String color,String sort){
        super(name,color,sort);
    }

    public void eat(){//吃饭
        System.out.println(name+"是"+sort+",爱吃昆虫");
    }
    public void cry(){//
        System.out.println("那只"+color+"的,名叫大兵的"+name+"正在呱呱的叫");
    } 
    public void swim(){
        System.out.println("虽然不是鱼,但"+name+"也是泳坛高手");
    }

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

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

实现思路及关键代码

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

a) 可以演电影movie

b) 可以演电视剧TV

c) 可以唱歌sing

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

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

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

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

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

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

 

class Test2_Artist {//artist艺人
    public static void main(String[] args) {
        Artist a=new Artist("马素素");
        System.out.println("大家好!我是"+a.getName());
        a.movie();
        a.tv();
        a.sing();
    }
}

interface Movie {   
    public abstract void movie();
}
interface Tv {   
    public abstract void tv();
}
interface Sing {   
    public abstract void sing();
}

class Artist implements Movie,Tv,Sing {
    private String name;
    public Artist(){}
    public Artist(String name){
        this.name=name;
    }

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

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

 

posted on 2018-07-17 20:09  三冬暖  阅读(512)  评论(0编辑  收藏  举报