Java类和对象的设计

举报
王小王-123 发表于 2021/04/23 23:49:48 2021/04/23
【摘要】 目录 一、实验目的 二、实验代码 1.定义一个类MyProgram,包含两个属性: 2. 在Vehicle类的基础上创建一个Tractor(拖拉机)类 3. 组合实现汽车类 4. 有图形接口Shape,参照圆Circle类补充完整正方形Square和三角形Triangle类,并分析运行结果。 5. USB接口程序设计 6.this关键字主要有三个应用: 7....

目录

一、实验目的

二、实验代码

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. 掌握thissuperfinalstatic等关键字的使用;

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

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

7. 掌握四种访问控制权限privatedefaultprotectedpublic

 

二、实验代码

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

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


  
  1. package 作业练习.test2;
  2. public class MyProgram {
  3. public static void main(String[] args) {
  4. Test t1=new Test();
  5. Test t2=new Test();
  6. t1.setStr("A");
  7. t2.setStr("B");
  8. t1.setData(1);
  9. t2.setData(2);
  10. System.out.println(t1.equals(t2));
  11. System.out.println(t1.toString());
  12. System.out.println(t2.toString());
  13. }
  14. }
  15. class Test{
  16. private String str;
  17. private int data;
  18. public String getStr() {
  19. return str;
  20. }
  21. public void setStr(String str) {
  22. this.str = str;
  23. }
  24. public int getData() {
  25. return data;
  26. }
  27. public void setData(int data) {
  28. this.data = data;
  29. }
  30. @Override
  31. public boolean equals(Object object) {
  32. Test test =(Test) object;
  33. if(test.getData()==this.getData()&&test.getStr() == this.getStr()) {
  34. return true;
  35. }
  36. else {
  37. return false;
  38. }
  39. }
  40. @Override
  41. public String toString() {
  42. return "str为"+this.getStr()+"\tdata为:"+this.getData();
  43. }
  44. }

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

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


  
  1. package 作业练习.test2;
  2. public class Vehicle {
  3. public float journey;
  4. public int wheelNum;
  5. public int loadNum;
  6. public int driveSpeed;
  7. public Vehicle() {
  8. journey = 100.3f;
  9. wheelNum = 4;
  10. loadNum = 1;
  11. }
  12. public void driveAt(int speed) {
  13. if (speed >= 60) {
  14. System.out.println("行车速度太快,容易造成事故");
  15. driveSpeed = 40;
  16. } else {
  17. System.out.println("你在安全行驶速度内行驶");
  18. driveSpeed = speed;
  19. }
  20. }
  21. }
  22. package 作业练习.test2;
  23. public class Tractor extends Vehicle {
  24. public void plough() {
  25. System.out.println("公里数:"+this.journey);
  26. System.out.println("车速:"+this.driveSpeed);
  27. System.out.println("承载量:"+this.loadNum);
  28. }
  29. public static void main(String[] args) {
  30. Tractor t = new Tractor();
  31. t.plough();
  32. t.driveAt(80);
  33. t.plough();
  34. }
  35. }

 

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)编写测试程序测试上述所有方法。


  
  1. package 作业练习.test2;
  2. class Engine extends Car {
  3. String type ;
  4. public void Engine(String type) {
  5. this.type = type;
  6. }
  7. void start() {
  8. System.out.println(type + " starts");
  9. }
  10. }
  11. class Wheel extends Car {
  12. String type ;
  13. int index = 0;
  14. public void Wheel(String type, int index) {
  15. this.type = type;
  16. this.index = index;
  17. }
  18. void roll() {
  19. System.out.println("wheel" + index + " " + type + " rolling");
  20. }
  21. }
  22. public class Car {
  23. String model;
  24. static Wheel[] wheels;
  25. static Engine engine = new Engine();
  26. Car(String model, Wheel[] wheels, String eg) {
  27. this.model = model;
  28. this.wheels = wheels;
  29. engine.Engine(eg);
  30. }
  31. Car() {
  32. }
  33. public void changeWheel(int index, String str) {
  34. wheels[index - 1].Wheel(str, index);
  35. }
  36. void start() {
  37. System.out.println(model + " firing");
  38. engine.start();
  39. for (int i = 0; i < 4; i++) {
  40. wheels[i].roll();
  41. }
  42. }
  43. public static void main(String[] args) {
  44. Wheel[] wheels = new Wheel[4];
  45. String model = "玛莎拉蒂";
  46. String engine = "FSI2.0L";
  47. for (int i = 1; i <= 4; i++) {
  48. wheels[i - 1] = new Wheel();
  49. wheels[i - 1].Wheel("德国马牌", i);
  50. }
  51. Car car = new Car(model, wheels, engine);
  52. car.start();
  53. System.out.println("-----更改轮胎型号-----");
  54. car.changeWheel(2, "米其林");
  55. car.changeWheel(3, "倍耐力");
  56. car.start();
  57. }
  58. }

 

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


  
  1. package 作业练习.test2;
  2. interface Shape {
  3. void draw();
  4. void erase();
  5. }
  6. class Circle implements Shape {
  7. public void draw() {
  8. System.out.println("Circle.draw()");
  9. }
  10. public void erase() {
  11. System.out.println("Circle.erase()");
  12. }
  13. }
  14. class Square implements Shape {
  15. public void draw() {
  16. System.out.println("Square.draw()");
  17. }
  18. public void erase() {
  19. System.out.println("Square.draw()");
  20. }
  21. }
  22. class Triangle implements Shape {
  23. public void draw() {
  24. System.out.println("Triangle.draw()");
  25. }
  26. public void erase() {
  27. System.out.println("Triangle.draw()");
  28. }
  29. }
  30. public class Shapes {
  31. public static Shape randShape() {
  32. switch ((int) (Math.random() * 3)) {
  33. default:
  34. case 0:
  35. return new Circle();
  36. case 1:
  37. return new Square();
  38. case 2:
  39. return new Triangle();
  40. }
  41. }
  42. public static void main(String[] args) {
  43. Shape[] s = new Shape[9];
  44. for (int i = 0; i < s.length; i++)
  45. s[i] = randShape();
  46. for (int i = 0; i < s.length; i++)
  47. s[i].draw();
  48. }
  49. }

5. USB接口程序设计

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

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


  
  1. package 作业练习.test2.USB接口;
  2. public class Computer {
  3. private USB[] usbArr=new USB[4];
  4. //向计算机上连接一个USB设备
  5. public void add(USB usb){
  6. //遍历所有的插槽
  7. for(int i=0;i<usbArr.length;i++){
  8. //如果发现一个空的
  9. if(usbArr[i]==null){
  10. usbArr[i]=usb;
  11. break;
  12. }
  13. }
  14. }
  15. //计算的开机功能
  16. public void powerOn(){
  17. //遍历所有的插槽
  18. for(int i=0;i<usbArr.length;i++){
  19. //如果发现有设备
  20. if(usbArr[i]!=null){
  21. //将USB设备启动
  22. usbArr[i].turnOn();
  23. }
  24. }
  25. System.out.println("计算机开机成功!!!");
  26. }
  27. //计算的关机功能
  28. public void powerOff(){
  29. //遍历所有的插槽
  30. for(int i=0;i<usbArr.length;i++){
  31. //如果发现有设备
  32. if(usbArr[i]!=null){
  33. //将USB设备关闭
  34. usbArr[i].turnOn();
  35. }
  36. }
  37. System.out.println("计算机关机成功!!!");
  38. }
  39. }

  
  1. package 作业练习.test2.USB接口;
  2. public class KeyBoard implements USB {
  3. @Override
  4. public void turnOn() {
  5. System.out.println("键盘启动了......");
  6. }
  7. @Override
  8. public void turnOff() {
  9. System.out.println("键盘关闭了......");
  10. }
  11. }

  
  1. package 作业练习.test2.USB接口;
  2. public class Mic implements USB {
  3. @Override
  4. public void turnOn() {
  5. System.out.println("麦克风启动了......");
  6. }
  7. @Override
  8. public void turnOff() {
  9. System.out.println("麦克风关闭了......");
  10. }
  11. }

  
  1. package 作业练习.test2.USB接口;
  2. public class Mouse implements USB {
  3. @Override
  4. public void turnOn() {
  5. System.out.println("鼠标启动了......");
  6. }
  7. @Override
  8. public void turnOff() {
  9. System.out.println("鼠标关闭了......");
  10. }
  11. }

  
  1. package 作业练习.test2.USB接口;
  2. public class Test {
  3. public static void main(String[] args) {
  4. //实例化计算机对象
  5. Computer computer=new Computer();
  6. //向计算机中添加鼠标、麦克风、键盘
  7. computer.add(new Mouse());
  8. computer.add(new Mic());
  9. computer.add(new KeyBoard());
  10. //启动计算机
  11. computer.powerOn();
  12. //关闭计算机
  13. computer.powerOff();
  14. }
  15. }

  
  1. package 作业练习.test2.USB接口;
  2. public interface USB {
  3. void turnOn();//启动
  4. void turnOff();//关闭
  5. }

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

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

 

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

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

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

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

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


  
  1. class base
  2. {
  3. int a = 100;
  4. }
  5. class sup1 extends base
  6. {
  7. int a = 200;
  8. void show()
  9. {
  10. System.out.println(a);
  11. System.out.println(a);
  12. }
  13. public static void main(String[] args)
  14. {
  15. new sup1().show();
  16. }
  17. }

 

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

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

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

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

 

 

每文一语

一个人活得幸不幸福,一要看是不是能睡着,二要看是不是能醒来

今日幸运色是粉色哟!粉粉的快乐你也可以拥有自己的快乐......

文章来源: blog.csdn.net,作者:王小王-123,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_47723732/article/details/112921014

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。