第四章 面向对象

返回目录

 

选择题

    1. (单选)以下语句中关于Java构造方法的说法错误的是(B
      1. 构造方法的作用是为创建对象进行初始化工作,比如给成员变量赋值
      2. 一个Java类可以没有构造方法,也可以提供1个或多个构造方法
      3. 构造方法与类同名,不能书写返回值类型
      4. 构造方法的第一条语句如果是super(),则可以省略,该语句作用是调用父类无参数的构造方法
    2. (单选)在Java中,以下程序编译运行后的输出结果为(D
      public class Test {
        int x, y;
        Test(int x, int y) {
          this.x = x;
          this.y = y;
        }
        public static void main(String[] args) {
          Test pt1, pt2;
          pt1 = new Test(3, 3);
          pt2 = new Test(4, 4);
          System.out.print(pt1.x + pt2.x);
        }
      }
      1. 6
      2. 34
      3. 8
      4. 7
    3. (单选)分析如下Java程序的代码所示,则编译运行后的输出结果是(C
      public class Test {
        int count=9;
        public void count1(){
          count=10;
          System.out.print("count1="+count);
        }
        public void count2(){
          System.out.print("count2="+count);
        }
        public static void main(String[ ] args) {
          Test t=new Test();
          t.count1();
          t.count2();
        }
      }
      1. count1=9; count2=9;
      2. count1=10;count2=9;
      3. count1=10; count2=10;
      4. count1=9; count2=10;
    4. (单选)使用权限修饰符(B)修饰的类的成员变量和成员方法,可以被当前包中所有类访问,也可以被它的子类(同一个包以及不同包中的子类)访问
      1. public
      2. protected
      3. defalut
      4. private
    5. (单选)以下关于继承条件下构造方法执行过程的代码的执行结果是(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();     
        }
      }
      1. execute Person()execute Student()execute PostGraduate()
      2. execute PostGraduate()
      3. execute PostGraduate()execute Student()execute Person()
      4. 没有结果输出
    6. (单选)编译运行如下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();
        }
      }
      1. Base method
      2. Child methodB
      3. hild methodB
      4. 编译错误
    7. (选2项)在Java中关于静态方法,以下说法中正确的是(A,C
      1. 静态方法中不能直接调用非静态方法
      2. 非静态方法中不能直接调用静态方法
      3. 静态方法可以用类名直接调用
      4. 静态方法里可以使用this
    8. (选2项)下列选项中关于Java中类方法的说法错误的是(A,C
      1. 在类方法中可用this来调用本类的类方法
      2. 在类方法中调用本类的类方法时可直接调用
      3. 在类方法中只能调用本类中的类方法
      4. 在类方法中调用实例方法需要先创建对象
    9. (选2项)在Java中关于abstract关键字,以下说法正确的是(A,B
      1. abstract类中可以没有抽象方法
      2. abstract类的子类也可以是抽象类
      3. abstract方法可以有方法体
      4. abstract类可以创建对象
    10. (选2项)在Java接口中,下列选项中属于有效的方法声明是(A,C
      1. public void aMethod( );
      2. final void aMethod( );
      3. void aMethod();
      4. private void aMethod( );

编码题

    1. 编写Java程序,用于显示人的姓名和年龄。定义一个类Person,该类中应该有两个私有属性: 姓名(name)和年龄(age),定义构造方法用来初始化数据成员。再定义显示 display() 方法将姓名和年龄打印出来,在 main 方法中创建人类的实例然后将信息显示。
      点击查看答案
      public class 第一节 {
        public static void main(String[] args) {
          Person p = new Person(21,"黄泽雨");
          p.display();
        }
      }
      class Person{
        private int age;
        private String name;
        public Person(int age, String name) {
          this.age = age;
          this.name = name;
        }
        public void display() {
          System.out.println("姓名:" + name + "\r\n" + "年龄:"+age);
        }
      }
    2. 定义一个圆类Circle,在类的内部提供一个属性:半径(r),同时提供两个方法:计算面积( getArea())和计算周长(getPerimeter())。通过两个方法计算圆的周长和面积并且对计算结果进行输出。最后定义一个测试类对Circle类进行使用。
      点击查看答案
      public class 第二节 {
        public static void main(String[] args) {
          Circle c = new Circle();
          c.getArea();
          c.getPerimeter();
        }
      }
      class Circle{
        private double r = 10;
        public void getArea() {
          System.out.println("圆的面积=" + (Math.PI*r*r));
        }
        public void getPerimeter() {
          System.out.println("圆的面积=" + (2*Math.PI*r));
        }
      }
    3. 构造方法与重载:定义一个网络用户类,信息有用户ID、用户密码、email 地址。在建立类的实例时把以上三个信息都作为构造函数的参数输入,其中用户ID和用户密码时必须缺省时email地址是用户 ID加上字符串“@gameschool.com”。
      点击查看答案
      public class 第三节 {
        public static void main(String[] args) {
          WebUser user = new WebUser("hzy",1234);
          user.login();
        }
      }
      class WebUser{
        private String id,email;
        private int pwd;
        public WebUser(String id,int  pwd) {
          this.id = id;
          this.email = id+"@gameschool.com";
          this. pwd = pwd;
        }
        public void login(){
          System.out.println("您的ID:"+id +"\r\n"+ "您的密码:"+pwd +"\r\n"+ "邮箱:"+email);
        }
      }
    4. 编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,计算并分别显示圆半径、圆面积、圆周长,圆柱体的体积。实现思路及关键代码:
      • 编写一个圆类Circle,该类拥有1个成员变量radius(私有,浮点型,用来存放圆的半径);2个构造方法(无参、有参)3个成员方法double getArea()(圆的面积)、double getPerimeter()(圆的周长)、void show()(输出圆的半径、周长、面积)
      • 编写一个圆柱体类Cylinder,它继承于上面的Circle类,该类拥有1个成员变量double hight(私有,浮点型、圆柱体的高)、1个构造方法2个成员方法double getVolume()(获取圆柱体的体积)、void showVolume()(将圆柱体的体积输出到屏幕)
        点击查看答案
        public class 第四节 {
          public static void main(String[] args) {
            Cylinder c = new Cylinder(10,5); //直接调用子类对象,同时调用父类对象
            c.Show();
            c.showVolume();
          }
        }
        class Circle2{
          private double radius;
          public Circle2(double radius){
            this.radius = radius;
          }
          public double getArea() { // 获取圆的面积
            double area = radius*radius*Math.PI;
            return area;
          }
          public double getPerimeter() { //获取圆的周长
            double perimeter = 2*Math.PI*radius;
            return perimeter;
          }
          public void Show() {
            System.out.println("圆的半径:"+radius +"\r\n"+ "圆的面积:"+getArea() +"\r\n"+ "圆的周长:"+getPerimeter());
          }
        }
        class Cylinder extends Circle2{
          private double hight;
          public Cylinder(double radius,double hight) {
            super(radius);
            this.hight = hight;
          }
          public double getVolume() { //获取圆柱体的体积
            double volume = getArea()*hight;
            return volume;
          }
          public void showVolume() {
            System.out.println("圆柱体面积:"+getVolume());
          }
        }
    5. 编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。可以弹奏的乐器包括二胡、钢琴和琵琶。实现思路及关键代码:
      • 定义乐器类Instrument,包括方法makeSound();
      • 定义乐器类的子类:二胡Erhu、钢琴Piano、小提琴Violin;
      • 定义乐手类Musician,可以弹奏各种乐器play(Instrument i);
      • 定义测试类,给乐手不同的乐器让他弹奏。
        点击查看答案
        public class 第五节 {
          public static void main(String[] args) {
            Erhu e = new Erhu();
            Piano p = new Piano();
            Violin v = new Violin();
            Musician m = new Musician();
            m.play(e);
            m.play(p);
            m.play(v);
          }
        }
        abstract class Instrument{
          String sound;
          abstract public String makeSound();
        }
        class Erhu extends Instrument{
          String sound = "二胡声";
          public String makeSound(){
            return sound;
          }
        }
        class Piano extends Instrument{
          String sound = "钢琴声";
          public String makeSound(){
            return sound;
          }
        }
        class Violin extends Instrument{
          String sound = "小提琴声";
          public String makeSound(){
            return sound;
          }
        }
        class Musician{
          public void play(Instrument i) {
            System.out.println(i.makeSound());
          }
        }
    6. 编写程序描述影视歌三栖艺人。需求说明:请使用面向对象的思想,设计自定义类,描述影视歌三梄艺人。实现思路及关键代码:
      • 分析影视歌三栖艺人的特性:可以演电影,可以演电视剧,可以唱歌
      • 定义多个接口描述特性,Movie接口(方法ActMovie)、Teleplay(方法ActTeleplay)、Singer接口(方法sing)
      • 定义艺人类实现多个接口
        点击查看答案
        // 输出结果
        大家好,我是周杰伦
        我能演电影
        我能演电视剧
        我会唱歌
        public class 第六节 {
          public static void main(String[] args) {
            Artist a = new Artist("周杰伦");
            a.ArtistName();
            a.ActMovie();
            a.ActTeleplay();
            a.Sing();
          }
        }
        interface Movie{
          void ActMovie();
        }
        interface Teleplay{
          void ActTeleplay();
        }
        interface Singer{
          void Sing();
        }
        class Artist implements Movie,Teleplay,Singer{
          String name;
          public Artist(String name) {
            this.name = name;
          }
          public void ArtistName() {
            System.out.println("大家好,我是"+name);
          }
          @Override
          public void ActMovie() {
            System.out.println("我能演电影");
          }
          @Override
          public void ActTeleplay() {
            System.out.println("我能演电视剧");
          }
          @Override
          public void Sing() {
            System.out.println("我会唱歌");
          }
        }