速学堂 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( );

二、简答题
  1. private、默认、protected、public四个权限修饰符的作用。
    private:修饰符表示私有,只能在同一类内被访问
    默认(default):可以被同一包内的类访问
    protected:可以被同一包内的类,以及不同包之间的之类访问
    public:可以被同一项目内的任何类访问
  2. 继承条件下子类构造方法的执行过程。
    检测子类中是否有显示调用父类方法,若无,则自动添加无参的super()方法
    若子类包含父类方法的调用,则进入父类的构造方法
    当父类的构造方法结束后,进入子类的构造方法开始构造
  3. 什么是向上转型和向下转型
    向上转型:父类引用指向子类对象的过程。
    向下转型:子类向上转型为父引用变量后,通过强制转型转换为子类型
    假设现有子类son,父类father:
    向上转型:father a = new son(); 向下转型:son b = (son) a;
  4. final和abstract关键字的作用。
    final:定义常量,所定义的类、对象、方法、属性不可被其他类修改
    abstract:定义抽象,在父类中被abstract定义的方法必须被子类实现,声明了一个子类“规范”
  5. = =和equals()的联系和区别。
    两者都用于逻辑全等的比较
    “= =”的作用有两个
    1.判断两个数值类型的数据,在数学逻辑上是否相等
    2.判断两个变量引用的类型,在内存中是否为同一个
    equals的用法
    1.根据Object类的原始定义,equals方法与“==”完全相等,都是比较两个对象,在内存中是否为同一个
    2.由于equals没有被final修饰,因此可以被子类继承,子类重写后,equals的功能无法确定
    3.在字符串实现类String中,重写了equals方法,用于比较两个字符串的内容是否相等
三、编码题
  1. 编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,计算并分别显示圆半径、圆面积、圆周长,圆柱体的体积。
    (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));
	}
}
  1. 编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。可以弹奏的乐器包括二胡、钢琴和琵琶。
    实现思路及关键代码:
  1. 定义乐器类Instrument,包括方法makeSound();
  2. 定义乐器类的子类:二胡Erhu、钢琴Piano和小提琴Violin;
  3. 定义乐手类Musician,可以弹奏各种乐器play(Instrument i);
  4. 定义测试类,给乐手不同的乐器让他弹奏。
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();
	}
}
  1. 编写程序描述影视歌三栖艺人。需求说明:请使用面向对象的思想,设计自定义类,描述影视歌三梄艺人。
    实现思路:
  1. 分析影视歌三栖艺人的特性:可以演电影,可以演电视剧,可以唱歌
  2. 定义多个接口描述特性
    a) 演电影的接口-----方法:演电影
    b) 演电视剧的接口-----方法:演电视剧
    c) 唱歌的接口-----方法:唱歌
  3. 定义艺人类实现多个接口
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("我会唱歌");
	}
	
}