一、实验目的

  • 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

有图形接口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 Mouse 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关键字修饰的类属性而言,子类就不能给他重新赋值了,如果重新赋值,会报错

到此这篇关于Java类和对象的设计原理的文章就介绍到这了,更多相关Java类和对象 内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Java类和对象的设计原理的更多相关文章

  1. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  3. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  4. PHP对象、模式与实践之高级特性分析

    这篇文章主要介绍了PHP对象、模式与实践之高级特性,结合实例形式分析了php面向对象程序设计中的静态属性和方法、抽象类、接口、拦截器、克隆对象等概念与简单实现方法,需要的朋友可以参考下

  5. Java实现世界上最快的排序算法Timsort的示例代码

    Timsort 是一个混合、稳定的排序算法,简单来说就是归并排序和二分插入排序算法的混合体,号称世界上最好的排序算法。本文将详解Timsort算法是定义与实现,需要的可以参考一下

  6. JS 对象介绍

    JS 对象介绍,需要的朋友可以参考下。

  7. PHP对象实例化单例方法

    本文主要介绍了PHP实例化对象单例的方法,具有很好的参考价值,下面跟着小编一起来看下吧

  8. ajax从JSP传递对象数组到后台的方法

    今天小编就为大家分享一篇ajax从JSP传递对象数组到后台的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  9. Java日期工具类的封装详解

    在日常的开发中,我们难免会对日期格式化,对日期进行计算,对日期进行校验,为了避免重复写这些琐碎的逻辑,我这里封装了一个日期工具类,方便以后使用,直接复制代码到项目中即可使用,需要的可以参考一下

  10. Java设计模式之模板方法模式Template Method Pattern详解

    在我们实际开发中,如果一个方法极其复杂时,如果我们将所有的逻辑写在一个方法中,那维护起来就很困难,要替换某些步骤时都要重新写,这样代码的扩展性就很差,当遇到这种情况就要考虑今天的主角——模板方法模式

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部