尚学堂JAVA第五章 作业

尚学堂JAVA第五章 作业

  • 一、选择题
    • 1.使用权限修饰符( B)修饰的类的成员变量和成员方法,可以被当前包中所有类访问,也可以被它的子类(同一个包以及不同包中的子类)访问。(选择一项)
    • 2、以下关于继承条件下构造方法执行过程的代码的执行结果是( A)。(选择一项)
    • 3.编译运行如下Java代码,输出结果是(D )。(选择一项)
    • 4.在Java中关于abstract关键字,以下说法正确的是(A B )。
    • 5.在Java接口中,下列选项中属于有效的方法声明是(A C )。(选择二项)
  • 二、简答题
    • 1、private、默认、protected、public四个权限修饰符的作用。
    • 2、继承条件下子类构造方法的执行过程。
    • 3、什么是向上转型和向下转型。
    • 4、final和abstract关键字的作用。
    • 5、==和equals()的联系和区别。
  • 三、编码题
    • 1、编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,计算并分别显示圆半径、圆面积、圆周长,圆柱体的体积。
    • 2、编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。可以弹奏的乐器包括二胡、钢琴和琵琶。
    • 3、3. 编写程序描述影视歌三栖艺人。需求说明:请使用面向对象的思想,设计自定义类,描述影视歌三梄艺人。

作业链接: http://www.sxt.cn/Java_jQuery_in_action/five-task.html

一、选择题

1.使用权限修饰符( B)修饰的类的成员变量和成员方法,可以被当前包中所有类访问,也可以被它的子类(同一个包以及不同包中的子类)访问。(选择一项)

Apublic

B.protected

C.默认

D.private

2、以下关于继承条件下构造方法执行过程的代码的执行结果是( A)。(选择一项)

(解析:所有子类会先用super()方法调用父类构造方法,再调用自己的构造方法)

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.没有结果输出

3.编译运行如下Java代码,输出结果是(D )。(选择一项)

(解析:上转型对象无法使用对象的新增方法,只能使用继承或重写的方法)

class Base {
    public void method(){
        System.out.print ("Base method");
    }
}
class Child extends Base{   
    public void methodB(){
        System.out.print ("Child methodB");
    }
}
class Sample {
    public static void main(String[] args) {
        Base base= new Child();
        base.methodB();
    }
}

A.Base method

B.Child methodB

C.hild methodB

D.编译错误

4.在Java中关于abstract关键字,以下说法正确的是(A B )。

A.abstract类中可以没有抽象方法

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

C.abstract方法可以有方法体

D.abstract类可以创建对象
(C(百度百科):java中的抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现)

(D:抽象类不能实例化,即不能用new来实例化抽象类。)

5.在Java接口中,下列选项中属于有效的方法声明是(A C )。(选择二项)

A.public void aMethod( );

B.final void aMethod( );

C.void aMethod();

D.private void aMethod( );
(B:final关键字可以用来修饰类、方法、变量、参数,不能修饰抽象类和接口。因为接口的方法是是抽象方法,必须通过子类继承重写来实现)
(D:接口的方法只能是public)

二、简答题

1、private、默认、protected、public四个权限修饰符的作用。

(1)public:可以被所有其他类所访问。

(2)private:只能被自己访问和修改。

(3)protected:自身,子类及同一个包中类可以访问。

(4)default(默认):同一包中的类可以访问,声明时没有加修饰符,认为是friendly。
(图片和内容来自https://blog.csdn.net/claram/article/details/48002833)
尚学堂JAVA第五章 作业_第1张图片

2、继承条件下子类构造方法的执行过程。

https://blog.csdn.net/smileflyinsky/article/details/62052722
(1)如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。在这种情况下,写不写“super();”语句,效果是一样的;

(2)如果子类的构造方法中通过super显式调用父类的有参构造方法,那将执行父类相应构造方法,而不执行父类无参构造方法;

(3)如果子类的构造方法中通过this显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则;

(4)特别注意的是,如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直到执行顶级父类Object类的无参构造方法为止;

3、什么是向上转型和向下转型。

https://blog.csdn.net/sheepmu/article/details/38327205

4、final和abstract关键字的作用。

https://blog.csdn.net/razespirit/article/details/41248247
final:是一个修饰符
1.final可以修饰类,函数,变量(成员变量,局部变量)
2.被final修饰后的类不可以被其他类继承
3.被final修饰后的函数不可以被重写
4.被final修饰后的变量不允许被再次赋值,final在对变量进行修饰时一定赋值,
被public final static多个修饰符修饰的的变量我们称它为常量

abstract:是一个修饰符可以修饰方法,类。当我们多个类存在相同的功能,但是功能的主体不同,这时我进行向上抽取只抽取功能的定义不抽取功能的主体
1.抽象方法一定要在抽象类中
2.抽象类和抽象方法必须要被abstract关键字修饰
3.抽象的类是不能被创建对象,因为调用抽象的方法没意义
4.抽象类的中方法要被使用,必须由子类重写抽象类中的方法。
然后创建子类对象来调用
5.抽象类中可以定义非抽象的方法,有时我们需要此类不能被new关键
字创建对象时,可以用abstract将此类变成抽象类。
6.子类如果只重写一部分的抽象类方法,那么该子类还是一个抽象类,
如果抽象类的方法要被使用,子类必须重写抽象类中的所有方法。

5、==和equals()的联系和区别。

https://blog.csdn.net/dianmomanxue/article/details/81300570
相同点:

都可以做比较;返回值均是布尔型boolean

不同点:

  • ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值

  • equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,比较的是地址值;重写后的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() //将圆柱体的体积输出到屏幕

比较复杂的版本:

package cn.sxt.homework05;
import java.util.Scanner;
/**
 * 编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,计算并分别显示圆半径、圆面积、圆周长,圆柱体的体积。
 * @author Nirvana
 *
 */
public class Homework01 {
	public static void main(String[]args) {
		Scanner input_r = new Scanner(System.in);
		System.out.println("请输入半径");
		double r = input_r.nextDouble();
		Scanner input_h = new Scanner(System.in);
		System.out.println("请输入高");
		double h = input_h.nextDouble();
		Circle c1 = new Cylinder();
		c1.setRadius(r);
		c1.show();
		Cylinder c2 = (Cylinder) c1;
		c2.setHight(h);
		c2.showVolume();
	}
}


class Circle{
	private double radius; //存放圆的半径
	final double pi = 3.14;
	public Circle() {
		
	}
	public Circle(int radius) {
		this.radius=radius;
	}
	public double getRadius() {
		return radius;
	}
	public void setRadius(double radius) {
		this.radius = radius;
	}
	public double getArea() { //获取圆的面积
		double area = getRadius()*getRadius()*pi;
		return area;
	}
	public double getPerimeter() { //获取圆的周长
		double perimeter = 2*pi*getRadius();
		return perimeter;
	}
	public void show() {  //将圆的关径、周长、面积输出到屏幕
		System.out.println("圆的半径为:"+getRadius()+",圆的面积为:"+getArea()+"。圆的周长为"+getPerimeter());
	}
}


class Cylinder extends Circle{
	private double height; //圆柱体的高
	public Cylinder() {
	}
	public Cylinder(double hight) {
		this.height=hight;
	}
	public double getHight() {
		return height;
	}
	public void setHight(double hight) {
		this.height = hight;
	}
	public double getVolume() { //获取圆柱体的体积
		double volume = getArea()*getHight();
		return volume;
	}
	public void showVolume() {
		System.out.println("圆柱体的体积为:"+getVolume());
	}
	
}

改良后版本(省略了get和set方法)


import java.util.Scanner;
/**
 * 编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,计算并分别显示圆半径、圆面积、圆周长,圆柱体的体积。
 * @author Nirvana
 *
 */
public class Homework01 {
	public static void main(String[]args) {
		double r;
		double h;
		Scanner input_r = new Scanner(System.in);
		System.out.println("请输入半径");
		r = input_r.nextDouble();
		Scanner input_h = new Scanner(System.in);
		System.out.println("请输入高");
		h = input_h.nextDouble();
		Circle c1 = new Cylinder(r,h);
		c1.show();
		Cylinder c2 = (Cylinder) c1;
		c2.showVolume();
	}
}


class Circle{
	private double radius; //存放圆的半径
	final double pi = 3.14;
	public Circle() {
		
	}
	public Circle(double r) {
		this.radius=r;
	}
	public double getArea() { //获取圆的面积
		double area = radius*radius*pi;
		return area;
	}
	public double getPerimeter() { //获取圆的周长
		double perimeter = 2*pi*radius;
		return perimeter;
	}
	public void show() {  //将圆的关径、周长、面积输出到屏幕
		System.out.println("圆的半径为:"+radius+",圆的面积为:"+getArea()+"。圆的周长为"+getPerimeter());
	}
}


class Cylinder extends Circle{
	private double height; //圆柱体的高
	public Cylinder() {
	}
	public Cylinder(double r,double hight) {
		super(r);
		this.height=hight;
	}
	public double getVolume() { //获取圆柱体的体积
		double volume = getArea()*height;
		return volume;
	}
	public void showVolume() {
		System.out.println("圆柱体的体积为:"+getVolume());
	}
	
}

2、编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。可以弹奏的乐器包括二胡、钢琴和琵琶。

  实现思路及关键代码:

  1) 定义乐器类Instrument,包括方法makeSound();

  2) 定义乐器类的子类:二胡Erhu、钢琴Piano和小提琴Violin;

  3) 定义乐手类Musician,可以弹奏各种乐器play(Instrument i);

  4) 定义测试类,给乐手不同的乐器让他弹奏。
package cn.sxt.homework05;
/**
 * 编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。可以弹奏的乐器包括二胡、钢琴和琵琶
 * @author Nirvana
 *
 */
public class Homework02 {
	public static void main(String[]args) {
		Instrument e = new Erhu();
		Instrument p = new Piano();
		Instrument v = new Violin();
		Musician m = new Musician();
		m.play(e);
		m.play(p);
		m.play(v);
	}
}

abstract class Instrument{   //定义抽象乐器类Instrument
	String name;
	String sound;
	abstract public String makeSound();  //定义抽象方法makeSound()
}
class Erhu extends Instrument{
	String name = "二胡";
	String sound = "二胡声";
	public String makeSound() {
		return sound;
	}
}
class Piano extends Instrument{
	String name = "钢琴";
	String sound = "钢琴声";
	public String makeSound() {
		return sound;
	}
}
class Violin extends Instrument{
	String name = "小提琴";
	String sound = "小提琴声";
	public String makeSound() {
		return sound;
	}
}
class Musician{
	public void play(Instrument i) {
		System.out.println(i.makeSound());
	}

}

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

  实现思路:

  1) 分析影视歌三栖艺人的特性:可以演电影,可以演电视剧,可以唱歌

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

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

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

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

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

程序运行结果如图所示。
尚学堂JAVA第五章 作业_第2张图片

package cn.sxt.homework05;
/**
* 编写程序描述影视歌三栖艺人
* @author Nirvana
*
*/
public class Homework03 {
   public static void main(String[]args) {
   	TriArtist a = new TriArtist("杨幂");
   	a.hello();
   	a.actMovie();
   	a.actTeleplay();
   	a.sing();
   }
}

/**演电影接口*/
interface ActMovie{
   void actMovie();
}

/**演电视剧接口*/
interface ActTeleplay{
   void actTeleplay();
}

/**唱歌接口*/
interface Sing{
   void sing();
}

class TriArtist implements ActMovie,ActTeleplay,Sing{ //定义艺人类实现多个接口
   String name;
   public TriArtist(String name) {
   	this.name=name;
   }
   
   @Override
   public void actMovie() {
   	System.out.println("我能演电影");
   }

   @Override
   public void actTeleplay() {
   	System.out.println("我能演电视剧");
   }

   @Override
   public void sing() {
   	System.out.println("我会唱歌");
   }
   public void hello() {
   	System.out.println("大家好,我是"+name);
   }
   
}

你可能感兴趣的:(JAVA学习)