速学堂 JAVA300 第五章练习
一、选择题
1.使用权限修饰符(B)修饰的类的成员变量和成员方法,可以被当前包中所有类访问,也可以被它的子类(同一个包以及不同包中的子类)访问。(选择一项)
A.public
B.protected
C.默认
D.private
2.以下关于继承条件下构造方法执行过程的代码的执行结果是(A)。(选择一项)
class Person {
public Person() {
System.out.println("execute Person()");
}
}
class Student extends Person {
public Student() {
System.out.println("execute Student() ");
}
}
class PostGraduate extends Student {
public PostGraduate() {
System.out.println("execute PostGraduate()");
}
}
public class TestInherit {
public static void main(String[] args) {
new PostGraduate();
}
}
A.execute Person()
execute Student()
execute PostGraduate()
B.execute PostGraduate()
C.execute PostGraduate()
execute Student()
execute Person()
D.没有结果输出
4.在Java中关于abstract关键字,以下说法正确的是(B)。
A.abstract类中可以没有抽象方法
B.abstract类的子类也可以是抽象类
C.abstract方法可以有方法体
D.abstract类可以创建对象
5.在Java接口中,下列选项中属于有效的方法声明是(A、C)。(选择二项)
A.public void aMethod( );
B.final void aMethod( );
C.void aMethod();
D.private void aMethod( );
二、简答题
- private、默认、protected、public四个权限修饰符的作用。
private:修饰符表示私有,只能在同一类内被访问
默认(default):可以被同一包内的类访问
protected:可以被同一包内的类,以及不同包之间的之类访问
public:可以被同一项目内的任何类访问 - 继承条件下子类构造方法的执行过程。
检测子类中是否有显示调用父类方法,若无,则自动添加无参的super()方法
若子类包含父类方法的调用,则进入父类的构造方法
当父类的构造方法结束后,进入子类的构造方法开始构造 - 什么是向上转型和向下转型
向上转型:父类引用指向子类对象的过程。
向下转型:子类向上转型为父引用变量后,通过强制转型转换为子类型
假设现有子类son,父类father:
向上转型:father a = new son();
向下转型:son b = (son) a;
- final和abstract关键字的作用。
final:定义常量,所定义的类、对象、方法、属性不可被其他类修改
abstract:定义抽象,在父类中被abstract定义的方法必须被子类实现,声明了一个子类“规范” - = =和equals()的联系和区别。
两者都用于逻辑全等的比较
“= =”的作用有两个
1.判断两个数值类型的数据,在数学逻辑上是否相等
2.判断两个变量引用的类型,在内存中是否为同一个
equals的用法
1.根据Object类的原始定义,equals方法与“==”完全相等,都是比较两个对象,在内存中是否为同一个
2.由于equals没有被final修饰,因此可以被子类继承,子类重写后,equals的功能无法确定
3.在字符串实现类String中,重写了equals方法,用于比较两个字符串的内容是否相等
三、编码题
- 编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,计算并分别显示圆半径、圆面积、圆周长,圆柱体的体积。
(1) 编写一个圆类Circle,该类拥有:
a) 一个成员变量,radius(私有,浮点型);//存放圆的半径
b) 两个构造方法(无参、有参);
c) 三个成员方法
double getArea() //获取圆的面积
double getPerimeter() //获取圆的周长
void show() //将圆的关径、周长、面积输出到屏幕
(2) 编写一个圆柱体类Cylinder,它继承于上面的Circle类。还拥有:
a) 一个成员变量,double hight (私有,浮点型); //圆柱体的高;
b) 构造方法
c) 成员方法
double getVolume() //获取圆柱体的体积
void showVolume() //将圆柱体的体积输出到屏幕
public class Circle {
private double radius;//成员变量
//两个构造方法
public Circle() {
System.out.println("构建父类构建方法");
};
public Circle(double radius) {
this.radius = radius;
}
//三个成员方法
double getArea(Circle c) {
return Math.PI*c.radius*c.radius;
}
double getPerimeter(Circle c) {
return 2*Math.PI*c.radius;
}
void show(Circle c) {
System.out.println("圆的半径为:"+c.radius);
System.out.println("圆的面积为:"+c.getArea(c));
System.out.println("圆的周长为:"+c.getPerimeter(c));
}
//主函数
public static void main(String args[]) {
Circle c = new Circle(2.5);
c.show(c);
Circle h = new Cylinder(2.5,2.4);
h.show(h);
Cylinder realc = (Cylinder)h;
realc.showVolume(realc);
}
}
class Cylinder extends Circle{
private double hight;
//构造方法
public Cylinder(double radius,double hight) {
super(radius);
this.hight = hight;
}
//成员方法
double getVolume(Cylinder h) {
return h.hight*h.getArea(h);
}
void showVolume(Cylinder h) {
System.out.println("圆柱的体积为:"+h.getVolume(h));
}
}
- 编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。可以弹奏的乐器包括二胡、钢琴和琵琶。
实现思路及关键代码:
- 定义乐器类Instrument,包括方法makeSound();
- 定义乐器类的子类:二胡Erhu、钢琴Piano和小提琴Violin;
- 定义乐手类Musician,可以弹奏各种乐器play(Instrument i);
- 定义测试类,给乐手不同的乐器让他弹奏。
public class Instrument {
//定义父类makeSound方法
public void makeSound() {
System.out.println("乐器弹奏测试");
}
//主函数,创建 乐手和乐器对象,将乐器对象提供给乐手,使其演奏
public static void main(String args[]) {
Musician m = new Musician();
Instrument i = new Instrument();
Instrument e = new Erhu();
Instrument p = new Piano();
Instrument v = new Violin();
m.paly(i);
m.paly(e);
m.paly(p);
m.paly(v);
}
}
//创建不同乐器类
class Erhu extends Instrument{
public void makeSound() {
System.out.println("在演奏二胡");
}
}
class Piano extends Instrument{
public void makeSound() {
System.out.println("在演奏钢琴");
}
}
class Violin extends Instrument{
public void makeSound() {
System.out.println("在演奏小提琴");
}
}
//创建乐手类,包含演奏方法
class Musician{
void paly(Instrument i){
i.makeSound();
}
}
- 编写程序描述影视歌三栖艺人。需求说明:请使用面向对象的思想,设计自定义类,描述影视歌三梄艺人。
实现思路:
- 分析影视歌三栖艺人的特性:可以演电影,可以演电视剧,可以唱歌
- 定义多个接口描述特性
a) 演电影的接口-----方法:演电影
b) 演电视剧的接口-----方法:演电视剧
c) 唱歌的接口-----方法:唱歌 - 定义艺人类实现多个接口
public class Artist{
public static void main(String args[]) {
art a = new art();
a.art("杨幂");
a.playMovie();
a.playDiansj();
a.playSing();
}
}
//定义多个接口
interface movie{
void playMovie();
}
interface diansj{
void playDiansj();
}
interface sing{
void playSing();
}
//创建艺人类
class art implements movie,diansj,sing{
void art(String name){
System.out.println("大家好,我是"+name);
}
@Override
public void playMovie() {
System.out.println("我能演电影");
}
@Override
public void playSing() {
System.out.println("我能演电视剧");
}
@Override
public void playDiansj() {
System.out.println("我会唱歌");
}
}