第4章 面向对象编程

简介: 第4章 面向对象编程

2-1


分数 2


60.类ArrayElement定义如下,它的子类定义正确的是?


class ArrayElement(val str:String){

def height =1


}


A.class LineElement(str: String) extends ArrayElement{

def width = str.length

}


B.class LineElement(s: String) extends ArrayElement(s) {

def width = str.length

}


C.class LineElement(str: String) extends ArrayElement(str){

def height =1

}


D.class LineElement(s String) extends ArrayElement{

def str = s

}


2-2


分数 2


98.在下述代码基础上,不能正确执行的操作是?


case class Currency(value: Double, unit: String)


val amt = Currency(29.95, "EUR")


需要指定参数名称才行


A.amt.copy(value = 19.2)


B.amt.copy()


C.amt.copy("CHF")


D.amt.copy(unit = "CHF")


2-3


分数 2


定义类Countter并实例化如下:

Class Countter(name:String){
        val a = 1
        var b = “counter”
}

val counter = new Countter(“computer”),下列操作正确的是?


A.counter.name = “cpu”


B.counter.a = 2


C.counter.b = “conter”


D.counter.a = counter.b


2-4


分数 2


类和单例对象间的差别是?


A.单例对象不可以定义方法,而类可以


B.单例对象不可以带参数,而类可以


C.单例对象不可以定义私有属性,而类可以


D.单例对象不可以继承,而类可以


2-5


分数 2


关于辅助构造器,以下说法正确的是?


A.辅助构造器的必须调用主构造器


B.辅助构造器的可以直接调用超类的主构造器


C.辅助构造器的参数可以是任意多个


D.辅助构造器的名称和类名相同


2-6


分数 2


关于主构造器,以下说法错误的是?


A.主构造器在每个类都可以定义多个


B.主构造器的参数可以直接放在类名后。


C.主构造器的会执行类定义中的所有语句。


D.主构造器中可以使用默认参数。


2-7


分数 2


定义类 Class Person(private val name: String){},以下说法正确是?


A.name是对象私有字段


B.name是类私有字段,有私有的getter方法

C.name是类公有字段,有公有的getter和setter方法


D.name是类私有字段,可以在类内部被改变


2-8


分数 2


scala 中,类成员的缺省访问级别是?


A.public


B.private


C.protected


D.以上都不对


2-9


分数 2


以下单例对象,定义错误的是?


A.object A{var str = ““}。


B.object A(str:String){}


C.object A{def str = ““}


D.object A{val str = ““}


2-10


分数 2


scala中,关于包的说法不正确的是?


A.包的名称不能重复。


B.同一个包可以定义在多个文件中。


C.包路径不是绝对路径。


D.包对象可以持有函数和变量。


2-11


分数 2


scala中,关于包的引用错误的是?


A.包和其成员可以用import


B.可以引用某个文件夹下的特定文件


C.可以引用某个文件夹下的所有文件


D.包引用只能在编译单元的开始处


2-12


分数 2


下面关于override修饰符的描述错误的是?


A.Scala里所有重载了父类具体成员的成员都需要这样的修饰符


B.Scala里如果子类成员实现的是同名的抽象成员则这个修饰符是可选的


C.Scala里如果子类中并未重载或实现什么基类里的成员则禁用这个修饰符


D.Scala里如果子类是抽象类则子类的同名成员不可以使用这个修饰符


2-13


分数 2


44.Scala里,final修饰符的描述正确的是?


A.类的声明上添加final修饰符确保成员不被子类重载


B.类的声明上添加final修饰符把整个类声明为final,这个类不能被继承

C.类的声明上添加final修饰符确保成员只能被子类重载一次


D.以上说法都是错误的


2-14


分数 2


定义一个类,定义正确的是?


A.class House(name){

def getname = “beijing”

}


B.class house {

name = “nanjing”

}


C.class House {

public var counter:String = “shanghai”

}


D.class house (var name:String){

private def getName = name

}

2-15


分数 2


.Scala类中的公有字段自带getter和setter,类class Persen{var age=0} ,age字段默认定义的方法是?


A.getter ,setter


B.getAge, setAge


C.age, age_


D.age, age_=


2-16


分数 2


关于辅助构造器,以下说法不正确的是?


A.辅助构造器的名称为this。


B.辅助构造器的定义要调用已定义的辅助构造器或主构造器。


C.辅助构造器可以有任意多个


D.辅助构造器必须要带参数


2-17


分数 2


Scala中的类,以下说法正确的是?


A.Scala中,类内部的不是从构造器定义的代码,都会在主构造器中执行


B.Scala中,类内部的不是字段的部分或者方法定义的代码,都会在主构造器中执行


C.Scala中,类内部的所有的代码,都会在主构造器中执行


D.以上说法都是错误的。


2-18


分数 2


scala 中,类和它的伴生对象说法错误的是?


A.类和它的伴生对象定义在同一个文件中。


B.类和它的伴生对象可以有不同的名称。


C.类和它的伴生对象可以互相访问私有特性。


D.类和它的伴生对象可以实现既有实例方法又有静态方法。


2-19


分数 2


关于对象的apply方法,正确的是?


A.apply方法返回的是伴生类的对象。


B.apply方法不可以带参数。


C.apply方法返回的是Unit。


D.apply方法定义在类里面。


2-20


分数 2


scala中,关于引入语句的说法不正确的是?


A.引入语句可以引入包.类和对象。


B.引入语句可以出现在任意位置。


C.引入语句可以重命名。


D.引入语句不可以隐藏特定成员。


2-21


分数 2


对于下述代码说法正确的是?


class Cat extends Animal{}


A.Cat是Animal的子类。


B.Animal是Cat的子类


C.Cat是Animal的超类


D.Animal一定是抽象类


2-22


分数 2


scala中的类,下面说法正确的是?


A.scala 中,使用extends进行类的扩展。


B.scala 中, 声明为final的类可以被继承。


C.scala中,超类必须是抽象类。


D.scala中,抽象类可以被实例化。


2-23


分数 2


scala中,下列描述错误的是?


A.Scala里,字段和方法属于相同的命名空间。


B.Scala一共有四个命名空间。


C.Scala里,字段可以重载无参数方法。


D.Scala类和特质属于相同的命名空间。


2-24


分数 2


scala中import java.util.{HashMap=>,}是


A.引入java.util包内的HashMap


B.引入java.util包内除了HashMap之外的所有成员


C.引入java.awt包内所有成员且把引入的成员变为函数


D.引入java.awt包内的所有返回值是HashMap的函数


2-25


分数 2


scala反编译后是


A.C语言


B.C++


C.JAVA


D.字节码文件


7-1 设计一个矩形类Rectangle        分数 10


全屏浏览题目


切换布局


作者 殷伟凤


单位 浙江传媒学院


设计一个名为Rectangle的类表示矩形。这个类包括:


  • 两个名为width和height的double类型数据域,它们分别表示矩形的宽和高。width和height的默认值都为1。


  • 一个用于创建默认矩形的无参构造方法。


  • 一个创建指定width和height值的矩形的构造方法。


  • 一个名为getArea()的方法,返回该矩形的面积。


  • 一个名为getPerimeter()的方法,返回周长。


编写一个测试程序,分别输入两个矩形的高和宽,创建两个Rectangle对象。按照顺序显示每个矩形的宽、高、面积和周长。


输入格式:


在一行内输入4个数据,依次为两个矩形的高和宽


输出格式:


每行输出一个矩形的宽、高、面积和周长,中间用空格隔开


输入样例:


在这里给出一组输入。例如:


4 40 3.5 35.9


输出样例:


在这里给出相应的输出。例如:


 4.0 40.0 160.0 88.0
 3.5 35.9 125.64999999999999 78.8


代码长度限制


16 KB


时间限制


400 ms


内存限制


import java.util.Scanner;
class Rectangle {
    double width = 1;
    double height = 1;
    public Rectangle() {
    }
    public Rectangle(double width ,double height) {
        this.width = width;
        this.height = height;
    }
    public double getArea() {
        return width * height;
    }
    public double getPerimeter() {
        return 2 * (width + height);
    }
    public String toString() {
        return width + " " + height;
    }
}
public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        String l = cin.nextLine();
        String[] str = l.split(" ");
        double w1 = Double.parseDouble(str[0]);
        double h1 = Double.parseDouble(str[1]);
        double w2 = Double.parseDouble(str[2]);
        double h2 = Double.parseDouble(str[3]);
        Rectangle r1 = new Rectangle(w1 ,h1);
        Rectangle r2 = new Rectangle(w2 ,h2);
        System.out.print(w1 + " " + h1 + " ");
        System.out.println(r1.getArea() + " " + r1.getPerimeter());
        System.out.print(w2 + " " + h2 + " ");
        System.out.println(r2.getArea() + " " + r2.getPerimeter());
    }
}


7-2 定义一个类表示圆(Circle)        分数 10


全屏浏览题目


切换布局


作者 吴光生


单位 新余学院


定义一个类表示圆(Circle),成员变量r表示圆的半径,成员方法printArea( )用于输出圆的面积。


定义测试类Main,在它的main方法中定义两个Circle类的对象c1、c2,从键盘输入两个数据分别作为c1和c2的半径,并分别调用它们的printArea( )方法输出其面积。


(提示:使用Math.PI表示圆周率,使用Scanner类进行输入,使用printf函数保留小数点后两位。)


输入格式:


输入两个数据分别作为圆c1和c2的半径,中间以空格隔开。


输出格式:


按两行分别输出圆c1和c2的面积,保留小数点后两位。


输入样例:


在这里给出一组输入。例如:


输入样例:


在这里给出一组输入。例如:


3  7.2


输出样例:


在这里给出相应的输出。例如:


 28.27
 162.86


代码长度限制


16 KB


时间限制


400 ms


内存限制


import java.util.*;
class Circle {
    double r = 0;
    public Circle(double r1) {
        this.r = r1;
    }
    public double printArea() {
        return r * r * Math.PI;
    }
}
public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        Circle r1 = new Circle(cin.nextDouble());
        System.out.printf("%.2f\n" ,r1.printArea());
        Circle r2 = new Circle(cin.nextDouble());
        System.out.printf("%.2f" ,r2.printArea());
    }
}


7-3 设计一个银行业务类        分数 20


全屏浏览题目


切换布局


作者 吴光生


单位 新余学院


编写一个银行业务类BankBusiness,具有以下属性和方法:


(1)公有、静态的属性:银行名称bankName,初始值为“中国银行”。


(2)私有属性:账户名name、密码password、账户余额balance。


(3)银行对用户到来的欢迎(welcome)动作(静态、公有方法),显示“中国银行欢迎您的到来!”,其中“中国银行”自动使用bankName的值。


(4)银行对用户离开的提醒(welcomeNext)动作(静态、公有方法),显示“请收好您的证件和物品,欢迎您下次光临!”


(5)带参数的构造方法,完成开户操作。需要账户名name、密码password信息,同时让账户余额为0。


(6)用户的存款(deposit)操作(公有方法,需要密码和交易额信息),密码不对时无法存款且提示“您的密码错误!”;密码正确、完成用户存款操作后,要提示用户的账户余额,例如“您的余额有1000.0元。”。


(7)用户的取款(withdraw)操作(公有方法,需要密码和交易额信息)。密码不对时无法取款且提示“您的密码错误!”;密码正确但余额不足时提示“您的余额不足!”;密码正确且余额充足时扣除交易额并提示用户的账户余额,例如“请取走钞票,您的余额还有500.0元。”。


编写一个测试类Main,在main方法中,先后执行以下操作:


(1)调用BankBusiness类的welcome()方法。


(2)接收键盘输入的用户名、密码信息作为参数,调用BankBusiness类带参数的构造方法,从而创建一个BankBusiness类的对象account。


(3)调用account的存款方法,输入正确的密码,存入若干元。密码及存款金额从键盘输入。


(4)调用account的取款方法,输入错误的密码,试图取款若干元。密码及取款金额从键盘输入。


(5)调用account的取款方法,输入正确的密码,试图取款若干元(取款金额大于余额)。密码及取款金额从键盘输入。


(6)调用account的取款方法,输入正确的密码,试图取款若干元(取款金额小于余额)。密码及取款金额从键盘输入。


(7)调用BankBusiness类的welcomeNext()方法。



输入格式:


输入开户需要的姓名、密码


输入正确密码、存款金额


输入错误密码、取款金额


输入正确密码、大于余额的取款金额


输入正确密码、小于余额的取款金额


输出格式:


中国银行(银行名称)欢迎您的到来!


您的余额有多少元。


您的密码错误!


您的余额不足!


请取走钞票,您的余额还有多少元。


请收好您的证件和物品,欢迎您下次光临!


输入样例:


在这里给出一组输入。请注意,输入与输出是交替的,具体顺序请看测试类中的说明。例如:


张三 123456
123456 1000
654321 2000
123456 2000
123456 500


输出样例:


在这里给出相应的输出。请注意,输入与输出是交替的,具体顺序请看测试类中的说明。例如:


中国银行欢迎您的到来!
您的余额有1000.0元。
您的密码错误!
您的余额不足!
请取走钞票,您的余额还有500.0元。
请收好您的证件和物品,欢迎您下次光临!


代码长度限制


16 KB


时间限制


400 ms


内存限制


import java.util.*;
class BankBusiness {
    public static String bankName  = "中国银行";
    private String name = null;
    private String password = null;
    private double balance = 0;
    public static void welcome() {
        System.out.println(bankName + "欢迎您的到来!");
    }
    public static void welcomeNext() {
        System.out.println("请收好您的证件和物品,欢迎您下次光临!");
    }
    public BankBusiness(String name ,String password) {
        this.name = name;
        this.password = password;
        this.balance = 0;
    }
    public void desposit(String password ,double change) {
        if (!password.equals(this.password)) {
            System.out.println("您的密码错误!");
        }
        this.balance += change;
        System.out.println("您的余额有" + this.balance + "元。");
    }
    public void withdraw (String password ,double change) {
        if (!password.equals(this.password)) {
            System.out.println("您的密码错误!");
        }
        else {
            if (balance < change){
                System.out.println("您的余额不足!");
            }
            else {
                this.balance -= change;
                System.out.println("请取走钞票,您的余额还有" + this.balance + "元。");
            }
        }
    }
}
public class Main{
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        BankBusiness b = new BankBusiness(cin.next() ,cin.next());
        b.welcome();
        b.desposit(cin.next() ,cin.nextInt());
        b.withdraw(cin.next() ,cin.nextInt());
        b.withdraw(cin.next() ,cin.nextInt());
        b.withdraw(cin.next() ,cin.nextInt());
        b.welcomeNext();
    }
}


目录
相关文章
|
7月前
|
C++
C++面向对象编程
C++面向对象编程
大神们是如何吐槽面向对象编程的
大神们是如何吐槽面向对象编程的
191 0
大神们是如何吐槽面向对象编程的
|
4月前
|
Python
面向对象编程
【8月更文挑战第29天】面向对象编程。
45 3
|
5月前
|
Java 程序员 C++
什么是面向对象编程
【7月更文挑战第17天】什么是面向对象编程
70 2
|
5月前
|
设计模式 测试技术 uml
什么是面向对象编程?
【7月更文挑战第18天】什么是面向对象编程?
57 1
|
设计模式
对面向对象编程的新认识
对面向对象编程的新认识
|
7月前
面向对象编程及面向过程编程
面向对象编程及面向过程编程
六 面向对象编程(下)
六 面向对象编程(下)
38 1
|
Java
四 面向对象编程(上)
四 面向对象编程(上)
67 0
五 面向对象编程(中)
五 面向对象编程(中)
35 0