Java类和对象的设计原理

目录
  • 一、实验目的
  • 二、实验代码
    • 1.定义一个类MyProgram,包含两个属性:
    • 2. 在Vehicle类的基础上创建一个Tractor(拖拉机)类
    • 3. 组合实现汽车类
    • 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

有图形接口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类和对象 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java面向对象程序设计:类的定义,静态变量,成员变量,构造函数,封装与私有,this概念与用法详解

    本文实例讲述了Java面向对象程序设计:类的定义,静态变量,成员变量,构造函数,封装与私有,this概念与用法.分享给大家供大家参考,具体如下: 本文内容: 什么是面对对象 类的定义与对象实例化 成员变量 成员变量的有效范围 成员变量的赋值 静态变量.方法与实例变量.方法 构造函数 封装与私有 this关键字 注:函数和方法是一样东西.[由于我之前学习的时候有些书籍不是同样的说法,书看多了,我就习惯了不同情况下用不同的说法] 首发时间:2018-03-22 什么是面对对象: 面向对象强调行为处于

  • Java面向对象程序设计:抽象类,接口用法实例分析

    本文实例讲述了Java面向对象程序设计:抽象类,接口用法.分享给大家供大家参考,具体如下: 本文内容: 抽象类 接口 抽象类与接口的异同 首发日期:2018-03-24 抽象类: 虽然已经有了父类,但有时候父类也是无法直接描述某些共有属性的,比如哺乳类和人类都会叫,而一般来说哺乳类这个父类并没有准确定义"叫"的属性的,显然应该由子类来决定怎么"叫",但"叫"这个属性是共有的,那么可以把这个属性抽象化(抽象则代表没有具体内容),由子类来实现具体内容

  • 详解java中面向对象设计模式类与类的关系

    前言 在java以及其他的面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖.关联.聚合.组合.继承.实现.他们的耦合度依次增强. 1. 依赖(Dependence) 依赖关系的定义为:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系.定义比较晦涩难懂,但在java中的表现还是比较直观的:类A当中使用了类B,其中类B是作为类A的方法参数.方法中的局部变量.或者静态方法调用.类上面的图例中:People类依赖于Bo

  • Java类和对象的设计原理

    目录 一.实验目的 二.实验代码 1.定义一个类MyProgram,包含两个属性: 2. 在Vehicle类的基础上创建一个Tractor(拖拉机)类 3. 组合实现汽车类 5. USB接口程序设计 6.this关键字主要有三个应用: 7.请简述static关键字的作用 8.请简述super关键字的作用 9.请简述final关键字的作用 一.实验目的 1. 掌握面向对象的编程思想.类与对象: 2. 掌握类的封装性.继承性和多态性的作用: 3. 掌握成员变量和成员方法的特性.构造方法.toStri

  • java类和对象原理与用法分析

    本文实例讲述了java类和对象原理与用法.分享给大家供大家参考,具体如下: 面向对象编程OOP 类:相似对象的集合. 对象 对象:实体.一切可以被描述的事物. 属性:特征. 方法:动作,行为. 类和对象的区别 [1]类时抽象的,对象是具体的. [2]类是一个模板,创建出来的对象具备共同的属性和方法. [3]类是一种数据烈性.引用数据类型. 语法 public classs 类名{ //定义属性部分 属性1的类型 属性1: 属性2的类型 属性2: ... 属性3的类型 属性n; //定义方法部分

  • 全面理解Java类和对象

    面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分.在面向对象程序设计(OOP)中,不必关心对象的具体实现.在传统的结构化程序设计中,算法是第一位的,数据结构是第二位的,即首先确定如何操作数,再考虑如何组织数据,以方便操作.而OOP则颠倒了这种次序,将数据放在第一位,然后再考虑操作数据的算法. 一.类 类是构造对象的模板和蓝图.通俗地说,类相当于建筑的图纸,而对象相当于建筑物.由类构造对象的过程称为创建对象的实例. Java中通过关键字class定义"类"

  • Java 类与对象超基础讲解

    目录 什么是面向对象 面向过程与面向对象 类与对象的使用 类与对象的使用与说明 对象的初始化 this的使用 构造方法 this可以调用本类的构造方法 什么是面向对象 Java语言是一个纯面向对象的语言,面向对象的语言不仅只有Java,包括C++,PHP等 面向对象的编程思想简称 OOP(Object Oriented Programming),其基本特点就是封装,继承和多态. 面向过程与面向对象 想要弄清楚什么是面向对象,首先需要知道两者的区别 面向过程更注重程序的每一个步骤,用相应的函数来实

  • 浅谈java类和对象

    目录 一.面向对象的描述 二.类和对象的基本概念 三.类定义和使用 1.简单认识类 2.类的定义 3.实例化对象 4.类的三大特性 封装 继承 多态 一.面向对象的描述 面向对象是一种现在最为流行的程序设计方法,几乎现在的所有应用都以面向对象为主了,最早的面向对象的概念实际上是由IBM提出的,在70年代的Smaltalk语言之中进行了应用,后来根据面向对象的设计思路,才形成C++,而由C++产生了Java这门面向对象的编程语言. 但是在面向对象设计之前,广泛采用的是面向过程,面向过程只是针对于自

  • Java 类与对象重难点详解

    目录 什么是类.对象? 类和类的实例化 字段的初始化 类当中实现方法 static 静态关键字 封装 private 实现封装 setter 和 getter 方法 构造方法 this 关键字 匿名对象 什么是类.对象? 因为计算机并不能像我们人这样去理解世界上的东西,所以为了更好的编辑,就抽象出了类和对象.类就是把功能放在一起,然后由一个人去调用这个功能,然后再编辑对应的功能.调用者就是对象的实现者 类和类的实例化 类是一类对象的统称,对象就是这一类具体化的实例 创建类的关键字:class 举

  • Java 类与对象详细

    目录 1.类 2.对象 3.练习 4.练习答案 前言: 早期的Java语言,是面对过程的语言(面向过程指把一个场景分割成一个个的步骤研究),如今的Java已经是面对对象的语言(面向对象指把一个场景分割成一个个的对象研究).面向对象是相比面向过程有很多便利的地方,以后读者会慢慢感受到~ 那么,何谓对象呢?小编正在使用的电脑是一个对象,读者手中的手机是一个对象--对象,指[一个][具体的]物品或者事物(注意对象可以是抽象的东西). 每个对象都有其特征和用途,不同类型的对象特征和用途有所不同.我们把具

  • 深入浅出分析Java 类和对象

    目录 一.什么是类 二.Java的类和C语言的结构体异同 三.类和类的实例化 类的声明 实例化的对象,成员遵循默认值规则 类的实例化 静态属性(静态成员变量) 四.构造方法 创建构造方法 this 一.什么是类 类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础.类是一种用户自定义的引用数据类型,也称类类型.每个类包含数据说明和一组操作数据或传递消息的函数,类的实例称为对象 类的实质是一种引用数据类型,类似于 byte,shor

  • java类与对象案例之打字游戏

    类与对象案例-童年回忆之打字游戏 一.玩家类 二.等级类 三.游戏类 四.等级地图 五.测试类 这次要做的案例是一个打字游戏的案例,相信大家小时候都玩过金山打字通的警察抓小偷和飞机大战,这次的案例是类似的简易版. 首先对于这个案例,我们要解决的是如何生成随机的字符串,如何判断生成的字符串和输入的字符串是否相等. 一.玩家类 package com.yc.oop6.hc0705; public class Player { private int score; //积分 private long

  • Java 精炼解读类和对象原理

    面向对象.面向过程 什么是类? 什么是对象? 这是非常抽象的两个概念!!!!!!!! 在说清楚类和对象的概念之前,给大家讲一下什么是面向对象.面向过程,以此来推出我们类和对象的概念. 面向过程:以洗衣服为例:拿盆.放水.放衣服.放洗衣粉.手搓.换水.拧干.晾衣服,这个过程就是面向过程.  面向对象:以洗衣服为例:人把衣服放进洗衣机,倒入洗衣粉,洗完晾干,不需要关心洗衣服整个过程是怎么完成的,只需要找对象,创建对象,使用对象.在好比我们使用toString函数,我们并不关心toString函数具体

随机推荐