定义一个类Square表示正方形

按下面的要求定义一个类Square表示正方形;

  • 正方形有边长(side)的属性,定义一个私有成员变量表示正方形的边长;
  • 为正方形定义一个默认构造器,默认构造的正方形边长为1.0;
  • 为正方形定义一个带参数构造器,参数用于设置正方形对象的边长;
  • 为私有成员变量定义setter和getter方法
  • 定义一个成员方法:float getArea(),该方法计算并返回正方形的面积
  • 定义一个成员方法:float getPerimeter(),该方法计算并返回正方形的周长
  • Square类的定义:

    //定义正方形类: 
    class Square{ }
     

    Main类:

    
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            Square square0 = new Square();
            float side = scanner.nextFloat();
            Square square1 = new Square(side);
            System.out.println("square0  面积:"+square0.getArea()+",周长:"+square0.getPerimeter());
            System.out.println("square1  面积:"+square1.getArea()+",周长:"+square1.getPerimeter());
            square1.setSide(10.0f);
            System.out.println("square1  面积:"+square1.getArea()+",周长:"+square1.getPerimeter());
    
        }
    }
    
    /* 请把Square类的定义代码写在下面 */
    
    /* 请在这里填写答案 */
     

    输入样例:

    输入正方形的边长,例如:

    5.5
    

    输出样例:

    分别输出正方形的周长和面积,例如:

    square0  面积:1.0,周长:4.0
    square1  面积:30.25,周长:22.0
    square1  面积:100.0,周长:40.0

按题目,main类已经完整,我们只需要补充Square类的定义。

这一节——定义类,就体现了java与c本质的不同了;

 类和对象:

众所周知,JAVA是一门面向对象编程的语言。对象在哪?答案是:需要我们创建。在许许多多对象中,它们有相同,有不同。

其实,我们可以先把具有同样属性和行为的对象分为一类,怎么分呢?总结出它们共同的属性和对象,我们写个框架模板,那我们直接在创建几个相同属性的对象的时候,直接就可以套用一个模板

接下来,我们边写边看——“知行合一”

属性:

定义类,顾名思义就是这个类是啥样的。

不同属性和行为,决定了每一个类都不同。

class Circle//定义类的整个大框架
{
 //...属性1;
 //...属性2;
 //...

//...行为1;
//...行为2;
//...

}

实例分析:

这道题,对象是:Square即正方形

按照题上给出的,正方形的属性有:边长

这时候有小伙伴会说,“欸,面积和周长不算吗?”,不算。你想想面积和周长怎么来的,根本还是基于属性(周长)算来的,面积和周长只是与边长相关的公式算来的。

那正方形的行为呢?答:求面积和周长

基于属性,发出的动作就是行为;特有的行为,java里面又叫方法,c里面叫函数

既然基于属性,那这个方法肯定用到了属性的值,那就要传值——我们想到了传参,至于把属性的值转换成面积和周长,这就是函数。

属性代码:

定义属性:public/private + 类型  + 变量名 ;

这个属性定义完整后,就是我们的成员变量。(在Suqare类里定义好的变量叫成员变量)

class Square
{
     private float side;//私有 float类型 名叫side
}

public还是private是访问修饰符,后面具体了解;现在嘛,一般题目上没说私有/private,咱们就大胆写上public。

显然这里说了: 

类型怎么确定的?看main方法

构造器:

构造器是什么?

“类中定义的一种特殊方法”。咱们说人话就是对成员变量赋值,分为默认初始化,传值修改。 

默认初始化,就是直接赋值初始化;传值修改,我们将输入的值,传给构造器使得相应成员变量被赋值。

这两种赋值方式,也意味着有两种构造器:无参构造器,有参构造器。

咱们再看这句话:“类中定义的一种特殊方法”。既然是方法(函数),那肯定有函数格式那一套: 返回类型 函数名(){    }

构造器这个方法特殊就特殊在没有返回类型。

格式:
 

public 类名()
{
    //赋值语句1
    //赋值语句2
    ...
}
public 类名(类型 形参名...)
{
    成员变量名 = 形参名;
    //赋值语句2
    ...
}

实例分析:

class Square
{
     public Square()
{
     side = 1.0f;//小细节:float类型变量赋值需要在末尾加f
}//无参构造器,又名默认构造器
     public Square(float s)//s是main方法里面我们输入的值
{
     side = s;//将s赋值给side,修改变量的值
}//有参构造器

}

构造器:实际上是赋值初始化,在一个对象里只能调用一次。你想初始化这个名词本来也只有一次的含义。

我们把眼光放在main方法里面调用构造器的语句上: 

现在我们可以解释这句话的逻辑:
new是操作符,后面是构造器,意为:调用构造器,生成对象;

那构造器真的没有返回类型吗,其实是有的,就是返回一个对象,整个对象赋给square0(仅助理解,不用较真)

接着:接下来的方法与函数大同小异,我们挑重点说说;

方法:

setter和getter方法:

set英译:设置,构造器是用来创建对象时,对属性初始化的,只能使用一次;但是有时我们需要再次改变成员变量的值,那该怎么办?这就是setter方法的用处。

其次,有时成员变量是private--在其他类里无法访问,即我们不能直接在main里引用成员变量进行赋值;get方法就是可以获取不论私有还是公有成员变量的值,并返回。

setter方法格式:

public void set成员变量(变量类型 变量名)//是一个方法,()为函数调用操作符
{
   成员变量 = 变量名;//传过来的是我们输入的值,在setter方法里赋给成员变量
}//记得setter方法只是修改成员变量,无返回值

依葫芦画瓢:getter 方法格式:

public 返回类型 get成员变量()//就是get已有变量的值,不需要传值
{
     return  成员变量;
}//get既然是拿到,那肯定有返回值

在方法名命名时,默认第二个单词首字母大写

实例代码:

public void setSide(float side1)//无返回类型,传值
        {
            side = side1;//赋值给成员变量
        }
public float getSide()
{
   return side;
}

本题在写这些方法时,有无传参可以在main方法里面看是否有传值,再在方法定义时决定是否返回。

作为green hand在写定义类题目,常看看main方法里调用方法时有无参数,需要几个参数。

除了构造器外,其他方法若没有返回值,记得加上void

正方形的面积和周长方法:

直接上代码:

public float getArea()//求面积
{
     return side * side;//正方形面积公式
}
public float getfloat getPerimeter()//求周长
{
  return side * 4;
}

这里肯定会有同学不习惯,在()里面不写形参啥的。

听我分析:在这个类里面,属性和方法是并存的,方法如果想要使用成员变量,直接使用。

呼——终于,完整代码呈现:

 class Square
    {
        private float side;
        public Square()//无参构造器
        {
            side = 1.0f;
        }
        public Square(float s)
        {
            side = s;
        }
        public void setSide(float side1)
        {
            side = side1;
        }
        public float getSide()
        {
            return side;
        }
       public float getPerimeter()
       {
           return  side * 4;
       }
        public float getArea()
        {
            return side * side;
        }

    }

总结:(先看目录)

定义属性时,可看main方法里面是否有相应的类型提示;

构造器是没有返回类型,不用写void,名字都是类名;

类里面的方法要调用成员变量,直接用;

setter有形参,getter无形参
 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐