其他内容参见 JAVA学习记录总贴
本期是oop的简单练习,确实都很简单,主要负责熟手
第一题
public static void main(String[] args) {
Car c = new Car();
Car car = new Car(100);
System.out.println(c);
System.out.println(car);
}
class Car {
double price = 10;
static String color = "white";
public String toString() {
return price + "\t" + color;
}
public Car(){
this.price = 9;
this.color = "black";
}
public Car(double price){
this.price = price;
}
}
答案:
9.0 black
100.0 black
分析:
这道题应该挺好理解的。
注意 color 是一个静态变量,在第一次 new Car 的时候,static变量 就已经被修改了。
所以,最后两个实例的静态变量都是 black。
第二题
不难,纯粹练手
-
在Frock类中声明私有的静态属性currentNum[int类型],初始值为100000,作为衣服出厂的序列号起始值。
-
声明公有的静态方法getNextNum,作为生成上衣唯一序列号的方法。每调用一次,将currentNum增加100,并作为返回值。
-
在Homework02类的main方法中,分两次调用getNextNum方法,获取序列号并打印输出。
-
在Frock类中声明serialNumber(序列号)属性,并提供对应的get方法。
-
在Frock类的构造器中,通过调用getNextNum方法为Frock对象获取唯一序列号,赋给serialNumber属性。
-
在Homework02类的main方法中,分别创建三个Frock 对象,并打印三个对象的序列号,验证是否为按100递增。
答案:
package hspedu.homework;
public class Homework02 {
public static void main(String[] args) {
System.out.println(Frock.getNextNum());
System.out.println(Frock.getNextNum());
Frock f1 = new Frock();
System.out.println(f1.getSerialNumber());
Frock f2 = new Frock();
System.out.println(f2.getSerialNumber());
Frock f3 = new Frock();
System.out.println(f3.getSerialNumber());
}
}
class Frock {
private static int currentNum = 100000;
private int serialNumber;
public static int getNextNum() {
currentNum += 100;
return currentNum;
}
public Frock() {
serialNumber = getNextNum();
}
public int getSerialNumber() {
return serialNumber;
}
}
第三题
一个简单的多态练习,题干如下
-
动物类Animal包含了抽象方法 shout();
-
Cat类继承了Animal,并实现方法shout,打印“猫会喵喵叫”
-
Dog类继承了Animal,并实现方法shout,打印“狗会汪汪叫”
-
在测试类中实例化对象Animal cat = new Cat(),并调用cat的shout方法
-
在测试类中实例化对象Animal dog = new Dog(),并调用dog的shout方法
答案:
public class Homework03 {
public static void main(String[] args) {
Animal cat = new Cat();
cat.shout();
Animal dog = new Dog();
dog.shout();
}
}
abstract class Animal{
abstract void shout();
}
class Cat extends Animal{
@Override
void shout() {
System.out.println("猫会喵喵叫");
}
}
class Dog extends Animal{
@Override
void shout() {
System.out.println("狗会汪汪叫");
}
}
第四题
-
计算器接口具有 work 方法,功能是运算,有一个手机类 Cellphone,定义方法 testWork 测试计算功能,调用计算接口的 work 方法
-
要求调用 CellPhone 对象 的 testWork 方法,使用上匿名内部类
答案:
ps:设计匿名内部类,建议还是认真写一下
public class Homework04 {
public static void main(String[] args) {
Cellphone cellphone = new Cellphone();
Calculator cal = new Calculator() {
@Override
public void work(int a, int b) {
System.out.println(a + b);
}
};
cellphone.testWork(cal, 7, 8);
}
}
interface Calculator {
void work(int a, int b);
}
class Cellphone {
public void testWork(Calculator calculator, int a, int b) {
System.out.println("测试计算功能");
calculator.work(a, b);
}
}
第五题
-
编一个类 A,在类中定义局部内部类 B,B 中有一个私有常量 name,有一个方法 show () 打印常量 name。进行测试
-
进阶:A 中也定义一个私有的变量 name,在 show 方法中打印测试
答案:a piece of cake
public class Homework05 {
public static void main(String[] args) {
new A().new B().show();
}
}
class A{
private final String name = "AAA";
class B{
private final String name = "BBB";
public void show(){
System.out.println(name);
System.out.println(A.this.name);
}
}
}
第六题
-
有一个交通工具接口类Vehicles,有work接口
-
有Horse类和Boat类分别实现Vehicles
-
创建交通工具工厂类,有两个方法分别获得交通工具Horse和Boat
-
有Person类,有name和Vehicles属性,在构造器中为两个属性赋值
-
实例化Person对象“唐僧”,要求一般情况下用Horse作为交通工具,遇到大河时用Boat作为交通工具
-
额外:使用匿名内部类,增加一个用飞机过火焰山的方法,因为只用一次,因此不要写一个新的类
答案:
public class Homework06 {
public static void main(String[] args) {
Person tang = new Person("唐僧", null);
tang.passRiver();
tang.common();
tang.passRiver();
tang.passMountain();
}
}
interface Vehicles {
void work();
}
class Horse implements Vehicles {
@Override
public void work() {
System.out.println("horse is working");
}
}
class Boat implements Vehicles {
@Override
public void work() {
System.out.println("boat is working");
}
}
class Plane implements Vehicles {
@Override
public void work() {
System.out.println("plane is working");
}
}
class Factory {
private static final Horse HORSE = new Horse();
private static final Boat BOAT = new Boat();
private static final Plane PLANE = new Plane();
public static Horse getHorse() {
return HORSE;
}
public static Boat getBoat() {
return BOAT;
}
public static Plane getPlane() {
return PLANE;
}
}
class Person {
private String name;
private Vehicles vehicle;
public Person(String name, Vehicles vehicle) {
this.name = name;
this.vehicle = vehicle;
}
public void setVehicle(Vehicles vehicle) {
this.vehicle = vehicle;
}
public void passRiver() {
if (!(vehicle instanceof Boat)) {
vehicle = Factory.getBoat();
}
vehicle.work();
}
public void common() {
if (!(vehicle instanceof Horse)) {
vehicle = Factory.getHorse();
}
vehicle.work();
}
public void passMountain() {
vehicle = new Vehicles(){
@Override
public void work() {
System.out.println("plane is working");
}
};
vehicle.work();
}
}
简要分析:
-
用懒汉式单例,保证只创建一个船和马对象,节省资源
-
用
vehicle instanceof Horse来判断具体情况
第七题
有一个 Car 类,有属性 temperature(温度),车内有 Air(空调)类,有吹风的功能 flow,Air 会监视车内的温度,如果温度超过 40 度则吹冷气。如果温度低于 0 度则吹暖气,如果在这之间则关掉空调。实例化具有不同温度的 Car 对象,调用空调的 flow 方法,测试空调吹的风是否正确。
public class Homework07 {
public static void main(String[] args) {
Car car = new Car(42);
Car.Air air = car.getAir();
air.flow();
Car car1 = new Car(2);
Car.Air air1 = car1.getAir();
air1.flow();
Car car2 = new Car(-1);
Car.Air air2 = car2.getAir();
air2.flow();
}
}
class Car{
private double temperature;
public Car(double temperature) {
this.temperature = temperature;
}
class Air{
public void flow(){
if(temperature > 40){
System.out.println("吹冷风");
} else if(temperature < 0){
System.out.println("吹暖风");
} else {
System.out.println("关闭空调");
}
}
}
public Air getAir(){
return new Air();
}
}
第八题
-
创建一个Color枚举类
-
有 RED,BLUE,BLACK,YELLOW,GREEN这五个枚举值/对象;
-
Color有三个属性redValue, greenValue, blueValue,
-
创建构造方法,参数包括这三个属性,
-
每个枚举值都要给这三个属性赋值,三个属性对应的值分别是
-
red: 255,0,0 blue:0,0,255 black:0,0,0 yellow:255,255,0 green:0,255,0
-
定义接口,里面有方法show,要求Color实现该接口
-
show方法中显示三属性的值
-
将枚举对象在switch语句中匹配使用
1 个帖子 - 1 位参与者