Java类和对象1练习

  1. 编写Book类,代表教材。要求如下:

(1)属性:名称(title)、页数(pageNum)

(2)页数不能多于600页,否则输出信息错误,并赋默认值600

(3)为属性提供赋值和取值方法

(4)info方法,控制台输出每本教材的名称和页数

(5)编写测试类BookTest进行测试,为Book的属性赋初值。

public class Book//定义Book类
 {
     private String title;//定义属性
     private int pageNum;
     public Book()//构造无参方法
     {
         title="unknown";
         pageNum =0;
     }
     public Book(String title ,int pageNum )//构造有参方法
     {
         this.title =title;
         if(pageNum > 600)//判断页数
         {
             pageNum =600;//设置默认值为600页
             System.out.println("页数不能多于600页,error");//超过600页报错
         }
         else{
             this.pageNum =pageNum;//页数未超过600页,页数不变
         }
     }
     public String getTitle ()//title取值方法
     {
         return title ;//返回title名字
     }
     public int getPageNum ()//pageNum取值方法
     {
         return pageNum;//返回页数
     }
     public void setTitle (String title )//定义为title赋值的方法
     {

         this.title =title ;
     }
    public void setPageNum (int pageNum )//定义为pageNum赋值的方法
    {
        //判断页数是否超过600页
         if(pageNum >600) {
             System.out .println("error,教材页数默认值为600");
             this.pageNum =600;//默认值为600页
        }
         else{
             this.pageNum =pageNum ;
         }
    }
    public void info()//定义info方法
    {

         System .out .println("教材的名称为"+title+","+"页数为"+pageNum ) ;//输出教材信息
     }
 }
public class BookTest {
    public static void main(String[] args) {
        Book book = new Book("java程序设计基础", 550);//创建Book对象并赋值
        book.info();//输出教材信息
        book.setTitle("概率论");//设置教材名字
        book.setPageNum(700);//设置教材页数
        book.info();//输出教材信息

    }
}

编写Account类,代表银行账户。要求如下:

(1)属性:账户id,余额balance,年利率annualInterestRate

(2)提供set、get方法,取款方法withdraw(),存款方法deposit()

(3)编写测试类,创建一个Customer,名字叫“李想”,账号为“20210035”,余额为“5000元”,年利率为1.35

(4)对李想操作,存入500元,再取出2000元,再取出4000元。

打印信息: 成功取出2000元,余额不足,取钱失败

/定义Account类
public class Account {
    String id;//定义属性
    double balance;
    double annualInterestRate;
    //构造无参方法
    public Account (){
        id="unknown";
        balance=0;
        annualInterestRate=0;
    }
    //构造有参方法
    public Account(String id,double balance, double annualInterestRate){
        this.id=id;
        this.balance =balance ;
        this.annualInterestRate=annualInterestRate;
    }
    //id取值方法
    public String getId() {
         return id ;
    }
    //balance取值方法
    public double getBalance() {
         return balance ;
    }
    //annualInterestRate取值方法
    public double getAnnualInterestRate(){
        return annualInterestRate;
    }
    //id赋值方法
    public void setId(String id) {
        this.id =id;
    }
    //balance赋值方法
    public void setBalance (double balance ){
        this.balance =balance ;
    }
    //annualInterestRate赋值方法
    public void setAnnualInterestRate(double annualInterestRate){
        this.annualInterestRate =annualInterestRate ;
    }
    //定义取款方法
    public void withdraw(double amount){
        if(balance>=amount )//判断余额是否大于要取的钱数
        {
            balance-=amount;//改变余额
            System .out .print("成功取出"+amount+"元,");//取钱成功
        }
        else{
            System .out .print("余额不足,取钱失败");//余额不足
        }
    }
    //定义存款方法
    public void deposit(double amount){
        balance+=amount;//改变余额
    }
}
//定义测试类
public class AccountTest {
    public static void main(String[] args) {
        Account customer = new Account("20210035", 5000, 0.0135);
        //创建Account对象为customer并赋值
        customer.deposit(500);//存款500元
        customer.withdraw(2000);//取款2000元
        customer.withdraw(4000);//取款4000元
    }
}

定义一个交通工具类Vehicle。要求如下

(1)属性:速度speed,体积size

(2)方法:移动move(), 设置速度setSpeed(int speed),加速speedUp(),减速speedDown()

(3)测试类中实例化一个交通工具对象,并通过方法给它初始化speed,size的值并打印出来。调用加速和减速进行测试。

//定义Vehicle类
public class Vehicle {
    //定义属性
    private int speed;

    private double size;
    //构造无参方法
    public Vehicle(){
        speed=0;
        size=0;
    }
    //构造有参方法
    public Vehicle(int speed,double size){
        this.speed =speed;
        this.size=size;
    }
    //speed取值方法
    public int getSpeed(){
        return speed;
    }
    //size取值方法
    public double getSize(){
        return size;
    }
    //speed赋值方法
    public void setSpeed(int speed){
        this.speed=speed;
    }
    //size赋值方法
    public void setSize (double size){
        this.size =size;
    }
    //定义move方法
    public void move(int speed){
        if(speed>0){
            System.out.println("正在移动,速度为"+speed+"km/h");
        }
    }
    //定义加速方法
    public void speedUp(){
        this.speed+=15;
        System .out.println("成功加速,此时速度为"+speed+"km/h");
    }
    //定义减速方法
    public void speedDown(){
        //先判断速度是否为0
        if(speed==0) {
            System .out.println("速度为0.无法减速");//此时速度为0,无法减速
        }
        //判断此时的速度是否大于要减的速度
        if(this.speed>=10) {
            this.speed-=10;//定义每次减10km/h
             System.out.println("减速成功,此时速度为"+speed+"km/h");
        }
            if(this.speed<10)//判断此时速度是否小于10
            {
                this.speed=0;//此时速度直接减为0
                System.out.println("减速成功,此时速度为0");
            }


    }
}
//定义测试类
public class VehicleTest {
    public static void main(String[] args) {
        //创建Vehicle对象vehicle,并赋值
        Vehicle vehicle = new Vehicle(8, 80);
        //输出初始速度
        System.out.println("初始速度:" + vehicle.getSpeed() + "km/h");
        //输出初始体积
        System.out.println("初始体积:" + vehicle.getSize() + "m³");
        //加速
        vehicle.speedUp();
        //减速
        vehicle.speedDown();
    }
}

模拟简单计算器,定义Number类。要求如下:

(1)属性:整型数据n1和n2,构造方法和set、get方法

(2)方法:为该类定义 加法addition(),减法subtration(),乘法multiplication(),除法division()等实例方法。

(3)测试类,创建对象,检测计算机的各项功能。

//定义Number类
public class Number {
    //定义属性
    private int n1;
    private int n2;
   //构造无参方法
    public Number(){
        n1=0;
        n2=0;
    }
    //构造有参方法
    public Number(int n1,int n2){
        this.n1=n1;
        this.n2=n2;
    }
    //n1取值方法
    public int getN1 (){
        return n1;
    }
    //n2取值方法
    public int getN2(){
        return n2;
    }
    //n1赋值方法
    public void setN1(int n1){
        this.n1 =n1;
    }
    //n2赋值方法
    public void setN2(int n2){
        this.n2 =n2;
    }
    //定义加法方法
    public void addition(){
        int sum;
        sum=n1+n2;
        System.out.println("n1和n2的和为"+sum);
    }
    //定义减法方法
    public void subtraction(){
        int sum;
        sum=n1-n2;
        System .out .println("n1和n2的差为"+sum);
    }
    //定义乘法方法
    public void multiplication(){
        int mul;
        mul=n1*n2;
        System .out .println("n1和n2的积为"+mul);
    }
    //定义除法方法
    public void division(){
        double div;
        div=(double)n1/(double)n2;//强制类型转换
        System .out .println("n1和n2的商为"+div);
    }
}
//定义NumberTest类
public class NumberTest {
    public static void main(String[] args) {
        //创建Number对象number
        Number number = new Number(30, 15);
        //n1取值并输出
        System.out.println("n1为" + number.getN1());
        //n2取值并输出
        System.out.println("n2为" + number.getN2());
        //调用加法方法
        number.addition();
        //调用除法方法
        number.division();
        //调用乘法方法
        number.multiplication();
        //调用减法方法
        number.subtraction();
    }
}

创建学生类的定义和使用。学生类包含在两个包中,在com.ncwu.userdefinelib包中设计日期类CDate,用来表示学生的出生年月;在com.ncwu.mainapp包中设计学生类CStudent和测试类Test3。

(1)创建一个Java项目,项目名称为javasource,在src文件夹下创建一个包,名称为“com.ncwu.userdefinelib”,在该包中新建一个日期类文件,名称为CDdate。

(2)日期类CDate用来描述学生的出生日期,有3个成员变量year、month、day,描述年、月、日。类中有无参构造方法,和有参构造方法,以及对成员变量的get和set方法,get方法用来控制成员变量的可读性,set方法用来控制成员变量的可写性。

(3)在src文件夹下创建一个包,名称为“com.ncwu.mainapp”,在该包中新建一个学生类,名称为CStudent。

(4)学生类CStudent用来描述学生的基本信息和行为。类中有实例变量sno、sname、sdate,描述学生的学号、姓名和出生日期;静态变量count,统计学生对象的个数,有无参构造和三个参数构造方法,以及私有成员变量set和get方法,get方法用来控制成员变量的可读性。

(5)Test3类完成学生类的测试,创建单个对象,对象数组,并测试学生类中的变量count,查看学生类对象的个数。

//CDate类在com.ncwu.userdefinelib包中
package com.ncwu.userdefinelib;
//定义CDate类
public class CDate {
    //定义属性
    private int year;
    private int month;
    private int day;
    //构造无参方法
    public CDate (){
        year=0;
        month=0;
        day=0;
    }
    //构造有参方法
    public CDate(int year,int month,int day){
        this.year=year;
        this.month=month;
        this.day=day;
    }
    //year取值方法
    public int getYear (){
        return year;
    }
    //month取值方法
    public int getMonth (){
        return month;
    }
    //day取值方法
    public int getDay (){
        return day;
    }
    //year赋值方法
    public void setYear (int year){
        this.year=year;
    }
    //month赋值方法
    public void setMonth (int month){
        this.month=month;
    }
    //day赋值方法
    public void setDay(int day){
        this.day=day;
    }
}
//CStudent在com.ncwu.mainapp包中
package com.ncwu.mainapp;
//调用com.ncwu.userdefinelib包中的CDate类
import com.ncwu.userdefinelib.CDate;
//定义CStudent类
public class CStudent {
    //定义实例变量
    private String sno;
    private String sname;
    private CDate sdate;
    //定义静态变量count
    private static int count = 0;

    //构造无参方法
    public CStudent() {
        count++;
    }
    //构造有参方法
    public CStudent(String sno, String sanme, CDate sdate) {
        this.sno = sno;
        this.sname = sanme;
        this.sdate = sdate;
        count++;
    }
    //count取值方法
    public static int getCount() {
        return count;
    }
    //sno取值方法
    public String getSno() {
        return sno;
    }
    //sname取值方法
    public String getSname() {
        return sname;
    }
    //sdate取值方法
    public CDate getSdate() {
        return sdate;
    }
    //sno赋值方法
    public void setSno(String sno) {
        this.sno = sno;
    }
    //sname赋值方法
    public void setSname(String sname) {
        this.sname = sname;
    }
    //sdate赋值方法
    public void setSdate(CDate sdate) {
        this.sdate = sdate;
    }
}
//Test3类在com.ncwu.mainapp包中
package com.ncwu.mainapp;
//引用com.ncwu.userdefinelib包中CDate类
import com.ncwu.userdefinelib.CDate;
//定义Test3类
public class Test3 {
  public static void main(String[] args) {
       //创建单个对象
        CStudent stu1 = new CStudent("202126303", "毛梦珂", new CDate(2002, 1, 8));
        //创建对象数组
        CStudent[] students = new CStudent[3];
        //查看对象类学生个数
        System.out.println("学生数量: " + CStudent.getCount());
    }
}
  1. 简述什么是封装。

类的封装,是指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象的内部信息,而是通过该类所提供的方法来实现对内部信息的操作访问。

2.构造方法和成员方法有什么区别?定义时需要注意哪些事项

目的:构造方法的目的是为了创建对象实例,而成员方法则是在对象实例被创建后用于执行某些操作或计算。

定义方式:构造方法使用关键字“public”、“protected”、“private”等来定义,而成员方法则需要在类中定义,同时需要指定方法的访问修饰符。

执行顺序:在创建对象时,构造方法会在成员方法之前被调用。

功能:构造方法主要负责对象的初始化工作,而成员方法则可以完成各种业务逻辑或计算任务。

在定义构造方法和成员方法时,需要注意以下事项:

构造方法的名称必须与类名相同,且没有返回值;成员方法可以任意命名,可以返回值也可以不返回值。

构造方法的访问修饰符应该与类的访问修饰符相同或更为宽松,例如类为public,构造方法也应该是public;成员方法的访问修饰符应该与构造方法的访问修饰符相同或更为宽松。

构造方法不能被继承,因此不能使用“super”关键字调用父类的构造方法;成员方法可以继承和覆盖父类的方法。

如果一个类没有定义构造方法,Java编译器会自动为其提供一个默认的无参构造方法;如果定义了多个构造方法,则必须定义一个明确的构造方法。

如果成员方法与构造方法具有相同的名称和参数列表,则成员方法将覆盖构造方法,这被称为构造方法的重载。但是,被覆盖的构造方法仍然可以被调用,通过使用“this”关键字。

  • 29
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值