面向对象之封装



一、类和对象

1.类

类是对现实社会中一类具有共同属性和行为的事物的抽象。

1.1类的组成

属性:指事物的特征,事物的信息,特定值。
行为:指事物能执行的操作,即事物能做什么,干什么。

1.2类的使用

①定义类

②编写类的成员变量

③编写类的成员方法

代码格式如下(示例):

public class 类名 {
	// 成员变量
	变量1的数据类型 变量1;
	变量2的数据类型 变量2;// 成员方法
	方法1;
	方法2;	
}

代码如下(示例):

/*
    手机类:
        类名:
        手机(Phone)

        成员变量:
        品牌(brand)
        价格(price)

        成员方法:
        打电话(call)
        发短信(sendMessage)
 */
public class Phone {
    //成员变量
    String brand;
    int price;

    //成员方法
    public void call() {
        System.out.println("打电话");
    }

    public void sendMessage() {
        System.out.println("发短信");
    }
}

2.对象

对象是能够看得到摸的着的真实存在的实体

2.1类和对象的关系又是啥呢?

类是对事物的一种描述,而对象则为具体存在的事物。

2.2对象的使用

创建对象
    格式:类名 对象名 = new 类名();
    范例:Phone p = new Phone();
 使用对象
    1:使用成员变量
        格式:对象名.变量名
        范例:p.brand
    2:使用成员方法
        格式:对象名.方法名()
        范例:p.call()

示例代码:

public class PhoneDemo {
    public static void main(String[] args) {
        //创建对象
        Phone p = new Phone();

        //使用成员变量
        System.out.println(p.brand);
        System.out.println(p.price);

        p.brand = "小米";
        p.price = 2999;

        System.out.println(p.brand);
        System.out.println(p.price);

        //使用成员方法
        p.call();
        p.sendMessage();
    }
}

二、面向对象编程三大特性(封装,继承,多态)之封装

1. 封装概念

封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其他对象只能通过包裹在数据外面的已经授权的操作来与这个封装的对象进行交流和交互。也就是说用户是无需知道对象内部的细节,但可以通过该对象对外的提供的接口来访问该对象。

2. 封装原则

将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
成员变量private,提供对应的getXxx()/setXxx()方法。

3. 封装好处

通过方法来控制成员变量的操作,提高了代码的安全性;
把代码用方法进行封装,提高了代码的复用性;

4. private的使用

private权限修饰符 ,Java中引入private的类型,目的是为了防止类中的数据成员,在类的定义之外被修改。也就说,private类型的数据成员只能在定义的时候修改,其余任何地方都不可以,该类的对象也不可以。 而且,private类型的数据可以作为构造函数的输入; 不过,我们也可以在类中定义读取和修改private类型数据的public函数。

5.this关键字

this修饰的变量用于指代成员变量,其主要作用是(区分局部变量和成员变量的重名问题)

  • 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
  • 方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量

三. 构造方法

1 .构造方法的概述

作用:创建对象 Student stu = new Student();

格式:

public class 类名{

​ 修饰符 类名( 参数 ) {

​ }
}

2.构造方法的注意事项

2.1构造方法的创建

如果没有定义构造方法,系统将给出一个默认的无参数构造方法
如果定义了构造方法,系统将不再提供默认的构造方法

2.2 构造方法的重载

如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法

2.3 推荐的使用方式

无论是否使用,都可以手工书写无参数构造方法

四. 示例

下面我们用一个简单示例,来对以上内容进行综述:

题目

声明一个日期类型MyDate: 有属性:年year,月month,日day。 创建2个日期
对象,分别赋值为:你的出生日期,你对象的出生日期,并显示信息。

package time;

public class MyDate {
    private int year;//定义属性
    private int month;
    private int day;

    //无参构造方法
    public MyDate() {
    }
	//有参构造方法,为成员变量进行初始化
    public MyDate(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

    //成员方法
    public void setYear(int year) {
        this.year = year;
    }

    public int getYear() {
        return year;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public int getMonth() {
        return month;
    }

    public void setDay(int day) {
        this.day = day;
    }

    public int getDay() {
        return day;
    }

    public void show() {
        System.out.println("出生日期为:" + year + "-" + month + "-" + day);//创建方法,打印属性值
    }
}

package time;
public class MyDateTest {
    public static void main(String[] args) {
        MyDate s = new MyDate(2000, 04, 03);//创建对象并给属性赋值
        s.show();//调用方法
        MyDate s1 = new MyDate(1997, 10, 23);
        s1.show();
    }
}

输出结果:

出生日期为:2000-4-3
出生日期为:1997-10-23


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值