Java实验3类方法重载构造方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实验3类方法重载构造方法相关的知识,希望对你有一定的参考价值。

 

实验目的:

掌握类和方法的定义,对象的创建和使用。

掌握引用的概念和引用赋值。

掌握方法重载,构造方法的作用及使用。

掌握包的概念和使用。

 

一、实验内容:

实验题目1-1

定义一个名为Rectangle的类表示矩形,其中含有length、width 两个double型的成员变量表示矩形的长和宽。编写一个RectDemo应用程序,在main()方法中创建一个矩形对象rt,通过访问成员变量的方式为两个成员变量赋值,计算并输出它的面积。

public class RecDemo {

    public static void main(String[] args) {

     double area;

     Rectangle rt=new Rectangle();

     rt.length=10;

     rt.width=10;

     area=rt.length*rt.width;

     System.out.println("面积是"+area);

    }

}

class Rectangle{

    double length;

    double width;

    double area;

}

结果

面积是100.0

实验题目1-2

修改Rectangle类,为每个变量定义访问方法和修改方法,定义求矩形周长的方法perimeter()和求面积的方法area()。修改RectDemo应用程序,在main()方法中创建矩形对象后通过方法设置其长和宽,然后输出其周长和面积。

public class RecDemo {

    public static void main(String[] args) {

      Rectangle rt = new Rectangle();

      rt.SetRec(11, 10);

      rt.perimeter();

      rt.Area();

    }

}

class Rectangle{

    double length;

    double width;

    double area;

    double perimeter;

    void SetRec(double length,double width) {

        this.length=length;

        this.width=width;

    }

    double getlength() {

        return length;

    }

    double getwidth() {

        return width;

    }

    void perimeter(){

        perimeter=length*2+width*2;

        System.out.println("周长是"+perimeter);

    }

    void Area(){

        area=length*width;

        System.out.println("矩形面积是"+area);

    }

}

结果

周长是42.0

矩形面积是110.0

实验题目1-3

为Rectangle类编写一个带参数的构造方法,通过用户给出的长、宽创建矩形对象,再编写一个默认的构造方法,在该方法中调用有参数的构造方法,将矩形的长宽分别设置为2和1。编写一个类测试这个矩形类。

public class RecDemo {

    public static void main(String[] args) {

     new Rectangle();

    }

}

class Rectangle{

    double length;

    double width;

    double area;

    double perimeter;

    Rectangle(double length,double width){

      this.length=length;

      this.width=width;

    }

    Rectangle(){

      Rectangle rt = new Rectangle(2,1);

      rt.Perimete();

      rt.Area();

    }

    void Area(){

        area=length*width;

        System.out.println("面积是"+area);

        }

    void Perimete(){

        perimeter=length*2+width*2;

        System.out.println("周长是"+perimeter);

    }

}

结果

周长是6.0

面积是2.0

实验题目2-1

定义一个名为Box的类,该类有三个double类型的成员变量,分别为length, width和height,表示盒子的长、宽和高。编写一个应用程序BoxDemo,创建一个名为mybox 的Box对象,通过访问成员变量的方式为三个成员变量赋值,然后计算该盒子的体积并输出。

public class BoxDemo {

    public static void main(String[] args) {

       Box mybox = new Box();

       double h=mybox.height=1;

       double l=mybox.length=2;

       double w=mybox.width=3;

       System.out.println("盒子的体积为:"+l*w*h);

    }

}

class Box{

    double length;

    double width;

    double height;

}

结果

盒子的体积为:6.0

实验题目2-2

修改Box类,为其成员变量定义修改方法和访问方法,再定义一个volume()方法用来求盒子的体积。用BoxDemo程序创建一个Box对象,测试这些方法的使用。

public class BoxDemo {

    public static void main(String[] args) {

        Box mybox = new Box();

        mybox.setbox(3, 2, 3);

        mybox.getlength();

        mybox.getheight();

        mybox.getwidth();

        mybox.volume();

    }

}

class Box{

    double length;

    double width;

    double height;

    void setbox(double length,double width,double height) {

        this.length=length;

        this.width=width;

        this.height=height;

    }

    double getlength() {

        return length;

    }

    double getwidth() {

        return width;

    }

    double getheight() {

        return height;

    }

    void volume() {

        double v;

        v=length*width*height;

        System.out.println("体积是:"+v);

    }

}

结果

体积是:18.0

实验题目2-3

修改Box类,为该类定义一个带有三个double型参数的构造方法。假设该构造方法的声明格式为Box(double length, double width, double height){ },方法体应如何编写。然后在BoxDemo程序中创建一个长、宽、高分别为10,20,15的Box对象,输出该对象的体积。如果再用new Box()创建一个对象会怎样,为什么?

构造方法用来给成员变量赋初值,如果再一次实例化一个对象,调用该对象的volume方法后结果会改变,是当前传入参数值赋初值后,调用方法后输出的结果,是新的值。

public class BoxDemo {

    public static void main(String[] args) {

        Box myBox=new Box(3,4,5);

        myBox.Volume();

        Box myBox2=new Box(1,2,3);

        myBox2.Volume();

    }

}

class Box{

    double length;

    double width;

    double height;

public  Box(double length,double width,double height){

        this.length=length;

        this.width=width;

        this.height=height;

     }

        void Volume(){

        System.out.println("体积为"+length*width*height);

    }

}

结果

体积为60.0

体积为6.0

实验题目3-1

定义一个名为Point的类来模拟一个点,一个点可用x和y坐标描述。在定义的类中编写一个main()方法,完成下面操作。

声明两个Point变量,start和end,将start点的坐标设置为(10,10),将end点的坐标设置为(20,30)。

使用输出语句分别打印start和end对象的x和y值,代码如下:

System.out.println("start.x="+start.x +", strat.y=" + start.y);

System.out.println("end.x="+end.x +", end.y=" + end.y);

public class Point {

    double x;

    double y;

   public static void main(String[] args) {

      Point start = new Point();

      start.x=10;

      start.y=10;

      Point end = new Point();

      end.x=20;

      end.y=30;

      System.out.println("start.x="+start.x+",start.y="+start.y);

      System.out.println("end.x="+end.x+",end.y="+end.y);

   }

  

}

结果

start.x=10.0,start.y=10.0

end.x=20.0,end.y=30.0

实验题目3-2    

声明一个Point类型的名为stray的变量,将变量end的引用值赋予stray,然后打印end和stray变量的成员x和y的值。

public class Point {

    double x;

    double y;

   public static void main(String[] args) {  

      Point end = new Point();

      end.x=20;

      end.y=30;

      Point stray = new Point();

      stray=end;  

      System.out.println("end.x="+end.x+",end.y="+end.y);

      System.out.println("stray.x="+stray.x+",stray.y="+stray.y); 

   }

  

}

结果

end.x=20.0,end.y=30.0

stray.x=20.0,stray.y=30.0

实验题目3-4

为stray变量的成员x和y指定新的值,然后打印end和stray的成员值。end的值反映了stray内的变化,表明两个变量都引用了同一个Point对象;

public class Point {

    double x;

    double y;

   public static void main(String[] args) {  

      Point end = new Point();

      end.x=20;

      end.y=30;

      Point stray = new Point();

      stray.x=10;

      stray.y=10;

      System.out.println("end.x="+end.x+",end.y="+end.y);

      System.out.println("stray.x="+stray.x+",stray.y="+stray.y); 

   }

  

}

结果

end.x=20.0,end.y=30.0

stray.x=10.0,stray.y=10.0

实验题目3-5

为start变量的成员x和y指定新的值,然后打印start和end的成员值。再次编译并运行Point类,start的值仍然独立于stray和end的值,表明start变量仍然在引用一个Point对象,而这个对象与stray和end引用的对象是不同的。

public class Point {

    double x;

    double y;

   public static void main(String[] args) {

      Point start = new Point();

      start.x=100;

      start.y=100;

      Point end = new Point();

      end.x=20;

      end.y=30;

      System.out.println("start.x="+start.x+",start.y="+start.y);

      System.out.println("end.x="+end.x+",end.y="+end.y);

      Point stray = new Point();

      stray.x=40;

      stray.y=40;

      System.out.println("stray.x="+stray.x+",stray.y="+stray.y);

   }

  

}

结果

start.x=100.0,start.y=100.0

end.x=20.0,end.y=30.0

stray.x=40.0,stray.y=40.0

实验题目4       

设计一个银行账户类,其中包括:

账户信息:账号、姓名、开户时间、身份证号、账户余额等。

存款方法。

取款方法。

其他方法如“查询余额”和“显示账号”等。

编写应用程序模拟存款和取款过程。

package Mywork;

 

import java.util.Scanner;

 

public class app {

      public static void main(String[] args) {

         System.out.println("请输入选项");

         int n;

         BankAccount ba = new BankAccount("12345678910","赵存档","2017-9-14","1111111");

         Scanner input = new Scanner(System.in);

         n=input.nextInt();

         switch(n){

             case 1:System.out.println("1.存款");ba.SaveMoney(input.nextDouble());ba.leftMoeny();

             case 2:System.out.println("2.取款");ba.getMoney(input.nextDouble());ba.leftMoeny();

             case 3:System.out.println("3.显示信息");ba.show_id();

             default:break;  

         }

         }

}

class BankAccount{

    String ba_id;

    String ba_name;

    String open_date;

    String p_id;

    double Money;

    BankAccount(String ba_id,String ba_name,String open_date,String p_id){

    this.ba_id= ba_id;

    this.ba_name=ba_name;

    this.open_date=open_date;

    this.p_id=p_id;

    }

    void SaveMoney(double Money) {

      

       this.Money=this.Money+Money;

    }

    double getMoney(double g_Moeny) {

       this.Money=this.Money-g_Moeny;

       return Money;

    }

    void leftMoeny() {

       System.out.println("余额"+this.Money);

    }

    void show_id() {

       System.out.println("账号是"+ba_id+"姓名是"+ba_name+"开户日期是"+open_date+"身份证号是"+p_id);

        

    }

}

结果

请输入选项

1

1.存款

112

余额112.0

2.取款

100

余额-100.0

3.显示账号

账号是12345678910

实验题目5

编写一个名为Input的类,该类属于com.tools包。使用该类实现各种数据类型(字符型除外)数据输入,其中的方法有readInt()、readDoube()、readString()等。在用户程序中通过调用Input.readDouble()即可从键盘上输入double型数据。例如,下面程序可以读入一个double型数据:

import com.tools.Input;

public class Test{

public static void main(String[] args){

double d = Input.readDouble();

System.out.println("d = "+d);

}

}

提示:使用java.util包中的Scanner类实现。

package com.tools;

import java.util.Scanner;

class Input{

static Scanner sc = new Scanner(System.in);

public static int readInt(){

System.out.print("输入整形");

return sc.nextInt();

}

public static float readFloat(){

System.out.print("输入浮点");

return sc.nextFloat();

}

public static double readDouble(){

System.out.print("输入双精度");

return sc.nextDouble();

}

public class Test{

public static void main(String[] args){

double d1 = Input.readDouble();

System.out.println("d = "+d1);

float d2 = Input.readFloat();

System.out.println("d = "+d2);

int d3 = Input.readInt();

System.out.println("d ="+d3);

}

}

结果

输入双精度12.2

d = 12.2

输入浮点1.1

d = 1.1

输入整形1

d =1

 

二、在实验中遇到的问题、解决问题采用的方法:

构造方法是名字与类名相同,没有返回值,也不能返回void,创建对象时用new,构造方法主要是初始化变量以及对类实例化后赋初值。

方法重载是方法的名字与类名相同,参数类型和个数至少有一个不同。

 

 

 

来源:http://www.cnblogs.com/xiaobo-Linux/ 

 

以上是关于Java实验3类方法重载构造方法的主要内容,如果未能解决你的问题,请参考以下文章

java-分支重载以及构造方法

Java构造方法

Java中,什么是构造方法?什么是构造方法重载?什么是复制构造方法?

从头学Java——之重载及构造方法

Java中方法重载和构造方法的区别

实验十二:面向对象基础 5构造方法重载