第四章 面向对象
选择题
-
- (单选)以下语句中关于Java构造方法的说法错误的是(B)
- 构造方法的作用是为创建对象进行初始化工作,比如给成员变量赋值
- 一个Java类可以没有构造方法,也可以提供1个或多个构造方法
- 构造方法与类同名,不能书写返回值类型
- 构造方法的第一条语句如果是super(),则可以省略,该语句作用是调用父类无参数的构造方法
- (单选)在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); } }
- 6
- 34
- 8
- 7
- (单选)分析如下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(); } }
- count1=9; count2=9;
- count1=10;count2=9;
- count1=10; count2=10;
- count1=9; count2=10;
- (单选)使用权限修饰符(B)修饰的类的成员变量和成员方法,可以被当前包中所有类访问,也可以被它的子类(同一个包以及不同包中的子类)访问
- public
- protected
- defalut
- private
- (单选)以下关于继承条件下构造方法执行过程的代码的执行结果是(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(); } }
- execute Person()execute Student()execute PostGraduate()
- execute PostGraduate()
- execute PostGraduate()execute Student()execute Person()
- 没有结果输出
- (单选)编译运行如下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(); } }
- Base method
- Child methodB
- hild methodB
- 编译错误
- (选2项)在Java中关于静态方法,以下说法中正确的是(A,C)
- 静态方法中不能直接调用非静态方法
- 非静态方法中不能直接调用静态方法
- 静态方法可以用类名直接调用
- 静态方法里可以使用this
- (选2项)下列选项中关于Java中类方法的说法错误的是(A,C)
- 在类方法中可用this来调用本类的类方法
- 在类方法中调用本类的类方法时可直接调用
- 在类方法中只能调用本类中的类方法
- 在类方法中调用实例方法需要先创建对象
- (选2项)在Java中关于abstract关键字,以下说法正确的是(A,B)
- abstract类中可以没有抽象方法
- abstract类的子类也可以是抽象类
- abstract方法可以有方法体
- abstract类可以创建对象
- (选2项)在Java接口中,下列选项中属于有效的方法声明是(A,C)
- public void aMethod( );
- final void aMethod( );
- void aMethod();
- private void aMethod( );
- (单选)以下语句中关于Java构造方法的说法错误的是(B)
编码题
-
- 编写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); } }
- 定义一个圆类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)); } }
- 构造方法与重载:定义一个网络用户类,信息有用户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); } }
- 编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,计算并分别显示圆半径、圆面积、圆周长,圆柱体的体积。实现思路及关键代码:
- 编写一个圆类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()); } }
- 编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。可以弹奏的乐器包括二胡、钢琴和琵琶。实现思路及关键代码:
- 定义乐器类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()); } }
- 编写程序描述影视歌三栖艺人。需求说明:请使用面向对象的思想,设计自定义类,描述影视歌三梄艺人。实现思路及关键代码:
- 分析影视歌三栖艺人的特性:可以演电影,可以演电视剧,可以唱歌
- 定义多个接口描述特性,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("我会唱歌"); } }
- 编写Java程序,用于显示人的姓名和年龄。定义一个类Person,该类中应该有两个私有属性: 姓名(name)和年龄(age),定义构造方法用来初始化数据成员。再定义显示 display() 方法将姓名和年龄打印出来,在 main 方法中创建人类的实例然后将信息显示。