Java(六)对象与类

1.对象与类

    对象代表现实世界中可以明确标识的一个实体。万事万物都可以是对象。例如:一个学生、一张桌子、一个客户、甚至各种抽象的事物比如一笔贷款,都可以看做是对象。每个对象都有自己独特的标识、状态和行为。

    ●一个对象的状态(也称为特征或属性)是由当前值得数据域来表示的。例如:圆对象具有一个数据域radius,它是标识圆的属性。一个矩形对象具有数据域width和height,它们都是描述矩形的属性。

    ●一个对象的行为(也称动作)是由方法定义的。调用对象的一个方法就是要求对象完成一个动作。例如:可以为圆对象定义一个名为 getArea() 和 getPerimeter() 的方 法。圆对象可以调用getArea()返回圆的面积,调用getPerimeter() 返回它的周长。还可以定义 setRadius(radius) 方法。 圆对象可以调用这个方法来修改它的半径。
    ●类是一个模板,蓝本或者说是合约,用来定义对象的数据域是什么以及方法是做什么的。一个对象是类的一个实例。可以从一个类中创建多个实例。创建实例的过程称为实例化。对象和实例经常可以互换。

2.如何定义一个类

    一般而言主要描述两个方面:属性:可以用一些参数描述类的信息,行为:可以用一系列的动作描述类      的信息。

    举例:点类   属性: x和y坐标  行为:求两点之间的距离

class Point{
//属性
    int x;
    int y;
//行为
    public double getDistance(Point p){//求两点之间的距离
        return Math.sqrt(Math.pow(x - p.x,2) + Math.pow(y - p.y, 2));
    }
}

举例:圆类  属性:半径和圆点  行为:1.计算圆的面积 2.计算圆的周长3.计算圆与其他圆的距离

class Circle{
    double radius;//半径
    double pi = Math.PI;
    Point p; //圆心
    /**
     * 计算圆的面积
     * @return area
     */
    public double gerArea(){
        double area =  pi * radius * radius ;
        return area;
    }
    /**
     * 计算圆的周长
     * @return perimeter
     */
    public double getPerimeter(){
        double perimeter = 2 * pi * radius ;
        return perimeter;
    }
    /**
     * 计算当前圆到其他圆的距离
     * @param c 另外一个圆的对象
     * @return distance 两个圆的距离
     */
    public double getDistance(Circle c){
        return p.getDistance(c.p);
    }
}

3.创建对象

当类创建好之后,我们就可以使用new来创建对象,并且可以用"."来访问其中的属性和方法。

 public static void main(String[] args) {
        
            Circle c1 = new Circle(); //创建一个圆的对象
            c1.radius = 10;           //访问对象的半径属性
            Point p1 = new Point();   // 创建一个点的对象
            p1.x = 0;
            p1.y = 0;
            c1.p = p1;

            Circle c2 = new Circle();
            c2.radius = 10;
            Point p2 = new Point();
            p2.x = 10;
            p2.y = 10;
            c2.p = p2;

            System.out.println(c1.getDistance(c2));
        
    }

 创建一个Cirlce对象
    1 在堆内存中开辟一个空间并分配地址(空间大小?透明的)
    2 对成员变量进行 【默认初始化】
    3 然后对成员变量进行【显示初始化】
    4 目前而言 对象创建完毕 将对象的地址赋予函数中的变量

这里的对象都使用的是默认构造方法来创建的对象。

 

4.构造方法

构造方法在使用new操作符创建对象的时候被调用。

构造方法是一种特殊的方法。有三个特殊性:1.构造方法必须和类的名字相同。2.构造方法没有返回值类型,连void也没有。3.构造方法是在创建一个对象使用new操作符时调用的。

class Person{
    private int age;
    private String name;
    Person(){
        this(0,null);//this(...) 调用当前类的其他构造函数 必须在第一句
        
    }
    Person(int age){
        this(age,null);
        System.out.println("1age参的");
    }
    Person(String name){
        this(0,name);
        System.out.println("1name参的");
    }
    Person(int age,String name){ //前面三个都是构造函数
   
        System.out.println("2参的");
        this.age=age;
        this.name=name;
    }
       public void show(){
        //如果局部变量没有重名 则默认用成员变量
        System.out.println(this.name+":"+this.age);
    }
    public void setAge(int age){
        //局部变量age 成员变量age
        if(age<0){
            this.age=0;
        }else{
            this.age=age;
        }
    }
    public int getAge(){
        return this.age;
    }
}

 如果一个类有多个构造方法, 最好尽可能使用 this( 参数列表 ) 实现它们。 通常,无参数或参数少的构造方法可以用 this( 参数列表 ) 调用参数多的构造方法。 这样做通常可以简化代码, 使类易于阅读和维护。还应该注意,构造函数之间不能互相调用。
 

5.可见性修饰符

可以在类、 方法和数据域前使用 public 修饰符, 表示它们可以被任何其他的类访问。如果没有使用可见性修饰符, 那么则默认类、 方法和数据域是可以被同一个包中的任何一个类访问的。 这称作包私有或包内访问。

有时,我们不想用户直接访问一个对象的数据,为防止数据被篡改以及使类更易于维护, 最好将数据域声明为私有的,就可以使用private修饰符对属性和方法进行修饰,private 修饰符限定方法和数据域只能在它自己的类中被访问。接着,我们可以设置修改器和访问器来帮助用户修改和访问被私有的属性。

还是用圆类来举例

上面的示例中,如果用户在改变半径的值时将其修改为负数,就会得到错误的答案,也与逻辑不符,因为半径只能大于等于0.

class Circle{
    private double radius;//这里设置半径为私有属性,不能被直接访问
    double pi = Math.PI;
    private Point p; //圆心
    public double gerArea(){
        double area =  pi * radius * radius ;
        return area;
    }
    public double getPerimeter(){
        double perimeter = 2 * pi * radius ;
        return perimeter;
    }
    public double getDistance(Circle c){
        return p.getDistance(c.p);
    }
    public void setRadius(radius){ //通过设置修改器,我们可以限定修改值的范围,防止出错
        if(radius >= 0)
            this.radius = radius;
        else
            this.radius = 0;
    }
    public double getRadius(){ //通过设置访问器,让用户可以访问
        return this.radius;
    }


}

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值