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分)
- 声明为final的类不能是超类。( ✖ )
- 使用final修饰的变量将变成常量,其中不能再被改变;使用final修饰的方法将无法被子类重载;使用final修饰的类将无法再被其他类继承。( ✔ )
- 抽象方法不能含有方法体,并且必须定义在抽象类中。( ✖ )
- 抽象类是指在class前加使用abstract关键字修饰,且可以存在抽象方法和普通方法的类。( ✔ )
- 接口中只有常量,没有变量;只有抽象方法,并且全部都是public方法。( ✔ )
- 抽象类和接口都不能实例化,都没有构造方法。( ✔ )
- 接口并不要求实现类和接口在概念本质上一致的,仅仅是实现了接口定义的约定或者能力而已。接口定义了“做什么”,而实现类负责完成“怎么做”,体现了功能(规范)和实现分离的原则。( ✔ )
- 内部类作为外部类成员,权限修饰符和其他成员一样,可声明为private、默认、protected或public。( ✖ )
- 匿名内部类适合创建那种只需要使用一次的类,它可以实现一个或多个接口,或者继承一个父类。( ✖ )
- 对于物理连接,比如数据库连接、输入流输出流、Socket连接等,垃圾回收机制无能为力,必须手动关闭才可以。( )
- 垃圾回收机制回收任何对象之前,总会先调用它gc( )方法,该方法是Object类提供的方法。不要主动调用某个对象的该方法,应该交给垃圾回收机制调用。( )
三、 简答题
- final和abstract关键字的作用。
fina关键字的作用:
1.被final修饰的类不能被继承
2.被final修饰的变量,变成了常量,只能被赋值一次,不能更改
3.被final修饰的方法,方法不能被重写
abstract关键字的作用:修饰 抽象类和抽象方法
- 接口和抽象类的联系和区别。
成员区别
抽象类(和普通类相比,只是可以多定义了抽象方法而已)
成员变量:可以变量,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:成员变量:只可以常量
构造方法:无
成员方法:只可以抽象
B:关系区别
类与类:继承,单继承,多层继承
类与接口:实现,单实现,多实现
接口与接口多继承:继承,单继承,
设计理念区别
抽象类 被继承体现的是:"is a"的关系.抽象类中定义的是该继承体系的共性功能
接口 被实现体现的是:"like a "的关系.接口中定义的是该继承体系的扩展功能.
- 内部类的类型及其特点。
内部类的主要类型:静态内部类、成员内部类、局部内部类、匿名内部类
静态内部类是指被声明为static的内部类,不能访问外部类的普通成员变量,只能访问外部类中的静态成员变量和静态方法。
去掉关键字static就是成员内部类,可以自由的引用外部类的属性和方法。
局部内部类是指定义在一个代码块内的类,作用范围为其所在的代码块。局部类类似于局部变量一样,不能被public、protected、private以及static修饰,只能访问方法中定义为final类型的局部变量。
匿名内部类,是一种没有类名的内部类,不使用关键字class、extends、implements,它必须继承其他类或实现其它接口。
- 介绍Java垃圾回收机制。
一、 编码题
- 编写程序描述兔子和青蛙
需求说明:使用面向对象的思想,设计自定义类描述兔子和青蛙。
实现思路及关键代码
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) 分析影视歌三栖艺人的特性
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("我会唱歌"); } }