实验10:面向对象编程基础(一)简单的类和对象
实验目的:
1.掌握类的定义,熟悉属性、构造函数、方法的作用,掌握用类作为类型声明变量和方法返回值;
2.理解类和对象的区别,掌握构造函数的使用,熟悉通过对象名引用实例的方法和属性;
实验数据记录及分析(或程序及运行结果)
1.写一个名为Rectangle的类表示矩形.其属性包括宽width、高height和颜color,width和height都是double型的,而color则是String类型的。要求该类具有:
(1)使用构造函数完成各属性的初始赋值
(2)使用getter和setter的形式完成属性的访问及修改
(3)提供计算面积的getArea()方法
class Rectangle {
    private double height;
    private double width;
    private String color;
    public double getHeight() {
        return height;
    }
    public void setHeight(double height) {
        this。height = height;
    }
    public double getWidth() {
        return width;
    }
    public void setWidth(double width) {
        this。width = width;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        lor = color;
    }
    public Rectangle(double width,double height,String color){
        this。setColor(color);
        this。setHeight(height);
        this.setWidth(width);
    }
    public void getArea(){
        double area=0;
        area=this.height*this。width;
        System.out.println(”矩形的面积为:"+area);
    }
    public String toString(){
        String recStr=”矩形的宽度:"+Width()+”高度:”+Height()      +"颜:”+this。getColor();
        return recStr;
    }
}   
public class JavaApplication{
    public static void main(String[] args) {
        Rectangle rec=new Rectangle(5, 8, "蓝”);
        rec。getArea();
        System。out.println(String());
    }
}
 
2.一副牌Deck有52张扑克Card组成(不含王牌),每张牌有自己的牌型suit(用char类型)和点数rank(用String类型),补充完整下面的类的定义。
public class Card {
    public Card() {
      this。suit = suit;
      this.rank = rank;
    }   
    public String toString() {
      return  suit+rank;
    }
    public static void main(String[] args){
        Card c=new Card(’红',"10”);
        System.out.println(c);
    }
public class Card {
    private char suit;
    private String rank;
    public Card(char suit,String rank  ) {
        this。suit = suit;
        this。rank = rank;
    }
    public String toString() {
        return  suit+rank;
    }
    public static void main(String[] args){
        Card c=new Card('红',”10”);
        System.out.println(c);
    }
   
3.银行的账户记录Account有账户的唯一性标识(11个长度的字符和数字的组合),用户的姓名,开户日期(Date),账户密码(六位的数字,可以用0开头),当前的余额。银行规定新开一个账户时,银行方面提供一个标识符、账户初始密码123456,客户提供姓名,开户时客户可以直接存入一笔初始账户金额,不提供时初始余额为0。定义该类,并要求该类提供如下方法:存款、取款、变更密码、可以分别查询账户的标识、姓名、开户日期、当前余额等信息。
import java。util.Date;
import java。util.Scanner;
public class Bank {
    private String id;
    private String name;
    private Date createTime;
    private String mima;
    private int balance;
    public amount(String id,String name, int balance){
        super();
        this。id=id;
        this.name=name;
        this。balance=balance;
        ateTime=new Date(); 
        this.mima="123456”;
    }
    public void deposit(int amount){
        this。balance+=amount;
    }
    public void withdraw(int amount){
        this。balance—=amount;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime( Date createTime){
        ateTime=createTime;
    }
    public void changemima(){
        Scanner sc=new Scanner(System.in);
        System。out.println("请输入新的密码:");
        String mima=sc。nextString();
        this。mima=new mima;
    }
    public static void main(String[] args){ 
        Bank a=new Bank(”1234567890","luxi”,1000);
        a。deposit(100);
        a.withdraw(150);
        a.changemima();
        a.createTime();
        System。out.println(”账户账号:”+a。getId());
        System。out.printf(”账户姓名: ”+a.getName());
        System.out.println("账户日期: ”+a。getCreateTime());
        System。out.println("账户余额: ”+a.getAmount());
    }
}
4.一个Fan有自己的品牌和型号,其调速旋钮speed可以调整Fan的速度(档级在0、1、2、3范围内),通电开关可以改变电扇状态(通电表示工作就绪或者工作,断电表示停止工作)请仔细分析并提供Fan类的定义.并编写程序对其进行测试。具体要求如下:
(1)表示该类对象的状态可以用品牌(brand,可以用字符串型表示,因为品牌通常都是多个字符组成的)、工作状态(status,用来反映一个电风扇是否处于通电就绪ready、正在转动working或者静止stop)、当前的速度(speed,可以用数值型表示);
(2)用构造函数可以创建一个电风扇对象,指定其品牌就可以了,一个电风扇的初始状态可以是静止,而且初始速度为0,分析为什么不适宜直接通过构造函数的形式参数来指定初始状态和速度;
(3)给该类提供如下的方法,重点考虑每个动作导致的状态变化,形成代码逻辑;
提供一个方法来表示电风扇的开与关,模拟一个开关动作
通过加速和减速两个方法来调整速度,当速度超出极限(0或3),向控制台输出一条告警信息作为提示,并且不执行该调速动作。
提供一个方法能够返回电风扇当前的状态和速度
(4)添加一个main方法,按顺序完成以下工作,考虑状态与速度变化和开关动作之间的关系:
创建一个电风扇对象,用f表示;
加速一次电风扇;
向控制台输出f的状态和速度;
启动电风扇(调用对象的开关方法);
向控制台输出f的状态和速度;
连续加速4次(考虑发生什么情况);
向控制台输出f的状态和速度;
连续减速4次(考虑发生什么情况);
向控制台输出f的状态和速度;
关掉电风扇(调用对象的开关方法);
连续加速2次
向控制台输出f的状态和速度;
import java。util。Scanner;
public class Fan{
    private String brand;
    private String type;
    private int level;
    private String status;
    public Fan(int level,String status){
        this。brand=”apple";
        pe="123”;
        this。level=level;
        this。status=status;
    }
    public void start(){
        this.level=1;
java switch case string        this。status="on";
        System。out。printf(”风扇已启动转速是%d\n",this。level);
    }
    public void stop(int level,String status){
        this。level=level;
        this。status= status;
        System。out.printf("风扇已关闭进入待机状态\n");
    }
    public void setspeed(int level){
        this。level=level;
        System。out.printf(”你已经设置的转速等级是%d\n”,this.level);
    }
    public void speed(){
        System。out。printf("请设置你要的转速*1,2,3*\n");
        Scanner conn=new Scanner(System。in);
        int le=conn。nextInt();
        switch(le){
            case 1:this。setspeed(1);break;
            case 2:this.setspeed(2);break;
            case 3:this。setspeed(3);break;
            case 0:this。stop(0,"off");break;
        }
    }
    public static void main(String []args){
        Fan f= new Fan(1,"on");
        Scanner con=new  Scanner(System.in);
        System.out.printf("欢迎使用%s公司的产品,你用的型号是%s\n”,f。pe);
        while(1>0){
            System.out.printf(”请输入你要设置有start,stop,speed分别有数字1,2,3替代");
            {
                int ac=con。nextInt();
                switch(ac){
                    case 1:{f.start();break;}
                    case 2:{f。stop(0,”off”);break;}
                    case 3:{f。speed();break;}
                }
            }
        }
    }
}
5.解释下面的程序运行结果输出为什么是null
        public class My {
            String s;
            public void My(){
                s = "Constructor”;
            }
            public void go() {
                System.out.println(s);
            }
            public static void main(String args[]) {
                My m = new My();
                m。go();
          }
      }
答:因为程序中s="Constructor”;是在方法My中进行的,Main方法中并没有调用方法My,所以s的值是null
6.给出下面的类,出后面的5个声明中,哪些是重载后的构造函数
public class ConstOver {
public ConstOver (int x, int y, int z) {
}
A。 ConstOver ( ) { }
B. Protected int ConstOver ( ) { }
C. Private ConstOver (int z, int y, byte x) { }
D. Public Object ConstOver (int x, int y, int z) { }
E。 Public void ConstOver (byte x, byte y, byte z) { }
答:A
7.给出下面的类,出后面的5个声明中,哪些是重载后的setVar函数
public class MethodOver {
public void setVar (int a, int b, float c) {
A. Private void setVar (int a, float c, int b) { }
B. Protected void setVar (int a, int b, float c) { }
C。 Public int setVar (int a, float c, int b) {return a;}
D. Public int setVar (int a, int b, float c) {return a;}
E。 Protected float setVar (int a, int b, float c) {return c;}
答:C、D、E
评语:
日期:  年  月  日

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。