Java类和对象的设计

简介: Java类和对象的设计

目录

一、实验目的

二、实验代码

1.定义一个类MyProgram,包含两个属性:

2. 在Vehicle类的基础上创建一个Tractor(拖拉机)类

3. 组合实现汽车类

4. 有图形接口Shape,参照圆Circle类补充完整正方形Square和三角形Triangle类,并分析运行结果。

5. USB接口程序设计

6.this关键字主要有三个应用:

7.请简述static关键字的作用

8.请简述super关键字的作用

9.请简述final关键字的作用


一、实验目的

1. 掌握面向对象的编程思想、类与对象;


2. 掌握类的封装性、继承性和多态性的作用;


3. 掌握成员变量和成员方法的特性、构造方法、toString方法、equals方法的使用;


4. 掌握this、super、final、static等关键字的使用;


5. 掌握接口及接口对象的使用;


6. 掌握包的定义与使用;


7. 掌握四种访问控制权限private、default、protected、public。


二、实验代码

1.定义一个类MyProgram,包含两个属性:

一个是private的整型属性data、一个是private的String类型属性str,封装这两个属性的四个方法setData( )和getData( )、setStr( )和getStr( );重写toString方法(自定义格式);重写equals方法(属性data和属性str均相同才表示两个对象相等)。并编写测试程序,测试MyProgram类的使用。

package 作业练习.test2;
public class MyProgram {
    public static void main(String[] args) {
        Test t1=new Test();
        Test t2=new Test();
        t1.setStr("A");
        t2.setStr("B");
        t1.setData(1);
        t2.setData(2);
        System.out.println(t1.equals(t2));
        System.out.println(t1.toString());
        System.out.println(t2.toString());
    }
}
class Test{
    private String str;
    private int data;
    public String getStr() {
        return str;
    }
    public void setStr(String str) {
        this.str = str;
    }
    public int getData() {
        return data;
    }
    public void setData(int data) {
        this.data = data;
    }
    @Override
    public boolean equals(Object object) {
        Test test =(Test) object;
        if(test.getData()==this.getData()&&test.getStr() == this.getStr()) {
            return true;
        }
        else {
            return false;
        }
    }
    @Override
    public String toString() {
        return "str为"+this.getStr()+"\tdata为:"+this.getData();
    }
}

2. 在Vehicle类的基础上创建一个Tractor(拖拉机)类

它不仅拥有journey、wheelNum、LoadNum、driveSpeed四个属性和DriveAt()方法,而且还拥有自己的plough()方法,在该方法中要求能够显示journey、wheelNum、LoadNum三个属性的值。请编写测试类,调用DriveAt()、plough()方法。

package 作业练习.test2;
public class Vehicle {
    public float journey;
    public int wheelNum;
    public int loadNum;
    public int driveSpeed;
    public Vehicle() {
        journey = 100.3f;
        wheelNum = 4;
        loadNum = 1;
    }
    public void driveAt(int speed) {
        if (speed >= 60) {
            System.out.println("行车速度太快,容易造成事故");
            driveSpeed = 40;
        } else {
            System.out.println("你在安全行驶速度内行驶");
            driveSpeed = speed;
        }
    }
}
package 作业练习.test2;
public class Tractor extends Vehicle {
    public void plough() {
        System.out.println("公里数:"+this.journey);
        System.out.println("车速:"+this.driveSpeed);
        System.out.println("承载量:"+this.loadNum);
    }
    public static void main(String[] args) {
        Tractor t = new Tractor();
        t.plough();
        t.driveAt(80);
        t.plough();
    }
}

3. 组合实现汽车类

问题描述:一辆Car有(has)四个轮子(Wheels)和一个发动机(Engine)。现在要求用组合方法设计类Car、类Wheel和类Engine。

(1) 类Engine 有字符串属性type记录发动机的型号;

有构造方法,可设置发动机的型号;

有方法start()启动引擎(输出发动机型号和字符串“starts”的)。

(2)类Wheel有字符串属性type记录轮胎的型号,有整数类型属性index记录当前轮胎编号(1:front-left,2:front-right,3:back-left,4:back-right);

有构造方法,可设置轮胎的型号和编号;

有方法roll()表示轮胎正在转动(输出轮胎型号、轮胎位置和“rolling”的字符串)。

(3)类Car有字符串属性model记录轿车的型号,有属性wheels[]和engine,分别是Wheel类对象数组和Engine类对象;

有构造方法,参数是三个字符串,分别表示轿车的型号、轮胎型号和发动机的型号;

有方法changeWheel()可以改变指定轮胎的型号;

有方法start(),先输出轿车型号和字符串“firing”,然后调用Engine的start(),再调用所有轮胎的roll(),最后显示轿车型号和字符串“running”。

(4)编写测试程序测试上述所有方法。

package 作业练习.test2;
class Engine extends Car {
    String type ;
    public void Engine(String type) {
        this.type = type;
    }
    void start() {
        System.out.println(type + " starts");
    }
}
class Wheel extends Car {
    String type ;
    int index = 0;
    public void Wheel(String type, int index) {
        this.type = type;
        this.index = index;
    }
    void roll() {
        System.out.println("wheel" + index + " " + type + " rolling");
    }
}
public class Car {
    String model;
    static Wheel[] wheels;
    static Engine engine = new Engine();
    Car(String model, Wheel[] wheels, String eg) {
        this.model = model;
        this.wheels = wheels;
        engine.Engine(eg);
    }
    Car() {
    }
    public void changeWheel(int index, String str) {
        wheels[index - 1].Wheel(str, index);
    }
    void start() {
        System.out.println(model + " firing");
        engine.start();
        for (int i = 0; i < 4; i++) {
            wheels[i].roll();
        }
    }
    public static void main(String[] args) {
        Wheel[] wheels = new Wheel[4];
        String model = "玛莎拉蒂";
        String engine = "FSI2.0L";
        for (int i = 1; i <= 4; i++) {
            wheels[i - 1] = new Wheel();
            wheels[i - 1].Wheel("德国马牌", i);
        }
        Car car = new Car(model, wheels, engine);
        car.start();
        System.out.println("-----更改轮胎型号-----");
        car.changeWheel(2, "米其林");
        car.changeWheel(3, "倍耐力");
        car.start();
    }
}

4. 有图形接口Shape,参照圆Circle类补充完整正方形Square和三角形Triangle类,并分析运行结果。

package 作业练习.test2;
interface Shape {
    void draw();
    void erase();
}
class Circle implements Shape {
    public void draw() {
        System.out.println("Circle.draw()");
    }
    public void erase() {
        System.out.println("Circle.erase()");
    }
}
class Square implements Shape {
    public void draw() {
        System.out.println("Square.draw()");
    }
    public void erase() {
        System.out.println("Square.draw()");
    }
}
class Triangle implements Shape {
    public void draw() {
        System.out.println("Triangle.draw()");
    }
    public void erase() {
        System.out.println("Triangle.draw()");
    }
}
public class Shapes {
    public static Shape randShape() {
        switch ((int) (Math.random() * 3)) {
            default:
            case 0:
                return new Circle();
            case 1:
                return new Square();
            case 2:
                return new Triangle();
        }
    }
    public static void main(String[] args) {
        Shape[] s = new Shape[9];
        for (int i = 0; i < s.length; i++)
            s[i] = randShape();
        for (int i = 0; i < s.length; i++)
            s[i].draw();
    }
}

5. USB接口程序设计

通常人们使用的计算机上都有USB接口,鼠标、键盘、麦克风等都可以连接到USB接口中使用。在计算机启动时,这些设备也随之启动;当计算机关闭时,这些设备也会随之关闭。鼠标、键盘、麦克风等USB接口设备都启动后,计算机才开机成功;当这些设备都关闭后,计算机才关机成功。


读所编写的USB接口程序,该程序模拟了计算机的开机和关机过程,写出运行结果。

package 作业练习.test2.USB接口;
public class Computer {
    private USB[] usbArr=new USB[4];
    //向计算机上连接一个USB设备
    public void add(USB usb){
        //遍历所有的插槽
        for(int i=0;i<usbArr.length;i++){
            //如果发现一个空的
            if(usbArr[i]==null){
                usbArr[i]=usb;
                break;
            }
        }
    }
    //计算的开机功能
    public void powerOn(){
        //遍历所有的插槽
        for(int i=0;i<usbArr.length;i++){
            //如果发现有设备
            if(usbArr[i]!=null){
                //将USB设备启动
                usbArr[i].turnOn();
            }
        }
        System.out.println("计算机开机成功!!!");
    }
    //计算的关机功能
    public void powerOff(){
        //遍历所有的插槽
        for(int i=0;i<usbArr.length;i++){
            //如果发现有设备
            if(usbArr[i]!=null){
                //将USB设备关闭
                usbArr[i].turnOn();
            }
        }
        System.out.println("计算机关机成功!!!");
    }
}
package 作业练习.test2.USB接口;
public class KeyBoard implements USB {
    @Override
    public void turnOn() {
        System.out.println("键盘启动了......");
    }
    @Override
    public void turnOff() {
        System.out.println("键盘关闭了......");
    }
}
package 作业练习.test2.USB接口;
public class Mic implements USB {
    @Override
    public void turnOn() {
        System.out.println("麦克风启动了......");
    }
    @Override
    public void turnOff() {
        System.out.println("麦克风关闭了......");
    }
}
package 作业练习.test2.USB接口;
public class Test {
    public static void main(String[] args) {
        //实例化计算机对象
        Computer computer=new Computer();
        //向计算机中添加鼠标、麦克风、键盘
        computer.add(new Mouse());
        computer.add(new Mic());
        computer.add(new KeyBoard());
        //启动计算机
        computer.powerOn();
        //关闭计算机
        computer.powerOff();
    }
}
package 作业练习.test2.USB接口;
public interface USB {
    void turnOn();//启动
    void turnOff();//关闭
}

6.this关键字主要有三个应用:

(1)this调用本类中的属性,也就是类中的成员变量;
(2)this调用本类中的其他方法;
(3)this调用本类中的其他构造方法,调用时要放在构造方法的首行。

7.请简述static关键字的作用

static是一个修饰符,用于修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性能。

static修饰的方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都必须依赖具体的对象才能够被调用。static块可以优化程序性能,是因为它的特性:只会在类被初次加载的时候执行一次。

8.请简述super关键字的作用

super用于在 派生类中调用父类的重名方法,或者引用重名的变量。super被用在派生类中,就是为了明确调用父类的方法。

class base
{
    int a = 100;
}
class sup1 extends base
{
    int a = 200;
    void show()
    {
        System.out.println(a);
        System.out.println(a);
    }
    public static void main(String[] args)
    {
        new sup1().show();
    }
}

9.请简述final关键字的作用

final关键字可以用于三个地方。用于修饰类、类属性和类方法。

被final关键字修饰的类不能被继承,被final关键字修饰的类属性和类方法不能被覆盖(重写);

对于被final关键字修饰的类属性而言,子类就不能给他重新赋值了,如果重新赋值,会报错


相关文章
|
20天前
|
Java
java8中List对象转另一个List对象
java8中List对象转另一个List对象
36 0
|
2天前
|
Java 编译器
Java Character 类
4月更文挑战第13天
|
2天前
|
存储 Java
Java基础教程(7)-Java中的面向对象和类
【4月更文挑战第7天】Java是面向对象编程(OOP)语言,强调将事务抽象成对象。面向对象与面向过程的区别在于,前者通过对象间的交互解决问题,后者按步骤顺序执行。类是对象的模板,对象是类的实例。创建类使用`class`关键字,对象通过`new`运算符动态分配内存。方法包括构造函数和一般方法,构造函数用于对象初始化,一般方法处理逻辑。方法可以有0个或多个参数,可变参数用`类型...`定义。`this`关键字用于访问当前对象的属性。
|
6天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
10 0
|
6天前
|
Java
Java 15 神秘登场:隐藏类解析未知领域
Java 15 神秘登场:隐藏类解析未知领域
10 0
|
6天前
|
存储 Java 编译器
对象的交响曲:深入理解Java面向对象的绝妙之处
对象的交响曲:深入理解Java面向对象的绝妙之处
36 0
对象的交响曲:深入理解Java面向对象的绝妙之处
|
8天前
|
安全 Java
append在Java中是哪个类下的方法
append在Java中是哪个类下的方法
21 9
|
9天前
|
JavaScript Java 测试技术
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
25 0
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
|
9天前
|
存储 安全 Java
java多线程之原子操作类
java多线程之原子操作类
|
11天前
|
Java
Java中的多线程实现:使用Thread类与Runnable接口
【4月更文挑战第8天】本文将详细介绍Java中实现多线程的两种方法:使用Thread类和实现Runnable接口。我们将通过实例代码展示如何创建和管理线程,以及如何处理线程同步问题。最后,我们将比较这两种方法的优缺点,以帮助读者在实际开发中选择合适的多线程实现方式。
19 4