面向对象思想

什么是面向对象

面向过程:
强调的是过程。也就是完成功能的每一个步骤都需要自己亲力亲为

面向对象:
强调的是对象。也就是让对象帮我们去完成功能

面向对象的好处

  • 将复杂的事情简单化了
  • 更符合人们思想习惯的思想(懒人思想)
  • 将程序员由执行者变成了指挥者

类和对象

类和对象的概念

什么是类

是对现实世界 同一类 具有 共同属性和行为 的 事物的模拟.
例如:学生类

什么是对象

就是某一类事物的具体体现,是类的具体体现
例如:张三、李四、王五

属性和行为

属性:
事物的基本特征 例如:学生类:都有姓名,都有年龄

行为:
事物可以做什么事情 例如:学生类:都会学习,都会吃饭

通过类创建对象,一个类可以创建多个对象

类和对象的关系

类是对象的抽象,而对象是类的具体实例

类的定义

属性用成员变量去表示
行为用成员方法去表示

成员变量:
定义在类中方法外的变量就是成员变量

成员方法:
就是之前的方法去掉了static

示例

public class Student {
    //属性:用成员变量表示
    //所有成员变量都要加上private关键字
    //作用:使属性私有化,其他类访问不到,只能被本类使用访问
    /**
     * 名字
     */
    private String name;
    /**
     * 年龄
     */
    private int age;
    /**
     * 体重
     */
    private double weight;
    /**
     * 性别
     */
    private String sex;
    //行为:用成员方法表示(没有static关键字的方法)

    /**
     * 学习
     */
    public void study() {
        System.out.println("好好学习,天天向上");
    }

    /**
     * 打游戏
     *
     * @param gameName 游戏名
     */
    public void playGame(String gameName) {
        System.out.println(name + "喜欢打" + gameName);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getWeight() {
        return weight;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

创建对象并使用

创建对象的格式:
类名 对象名 = new 类名();
Student stu = new Student();
成员变量的使用格式:
对象名.成员变量名
sout(stu.name);
如果在本类中使用就可以直接写成员变量名
成员方法的使用格式:
对象名.成员方法名(参数);

示例(第一种赋值方式 不用)

public class TestStudent {
    public static void main(String[] args) {
        Student stu = new Student();
        //属性赋值 对象名.属性名=????
        //第一种给属性赋值的方式(不用)
        stu.name="张三";
        stu.sex="女";
        stu.age=20;
        stu.weight=180.0;

        System.out.println(stu.name);
        System.out.println(stu.age);
        System.out.println(stu.sex);
        System.out.println(stu.weight);

        //方法调用 对象名.成员方法
        stu.study();
        stu.playGame("LOL");
    }

示例(第二种赋值方式)

public class TestStudent {
    public static void main(String[] args) {
        Student stu = new Student();
    
    //第二种给属性赋值的方式
        stu.setName("张三");
        stu.setAge(18);
        stu.setSex("男");
        stu.setWeight(180.0);

        System.out.println(stu.getName());
        System.out.println(stu.getAge());
        System.out.println(stu.getSex());
        System.out.println(stu.getWeight());

        //方法调用 对象名.成员方法
        stu.study();
        stu.playGame("LOL");
    }
}

一个类就是一个数据类型

public class String{
.......
}

public class Student{

}
一个类就是一个数据类型

成员变量和局部变量的区别

定义位置

成员变量:定义在类中方法外。作用于整个类中
局部变量:定义在方法内或方法的声明上。作用于方法里

在内存中的位置

成员变量:在堆内存中
局部变量:在栈内存中

生命周期

成员变量:随着对象的创建而创建。随着对象的消失而消失
局部变量:随着方法的调用而创建。随着方法的消失而消失

初始化值

成员变量:有默认初始化值
局部变量:没有默认初始化值。使用之前必须赋值

构造方法

构造方法的特点:
①类名和方法名相同
②没有返回值类型,连void都不能写

构造方法的调用格式:
new 类名(参数);

构造方法
本身的作用(即使构造方法中什么代码也不写)
就是用来创建对象的,
它还有一个非常重要的作用是进行类中成员变量的默认初始化
我们赋予其的作用
给成员变量进行赋值

注意事项:
①如果没有写构造方法,编译器会默认赠送一个无参构造,如果写了,它就不会赠送了
②构造方法也可以重载

构造器与set方法给属性赋值的区别:
构造器只能给属性赋值一次,set方法可以赋值多次
也只适用于参数不多的情况

示例(第三种赋值方式)

public class Fridge {
    /**
     * 颜色
     */
    private String color;
    /**
     * 价格
     */
    private double price;
    /**
     * 品牌
     */
    private String brand;


    /**
     * 打开冰箱门
     */
    public void openDoor() {
        System.out.println("打开门");
    }

    /**
     * 放置
     * @param name 放置的东西
     */
    public void put(String name) {
        System.out.println("把" + name + "放进冰箱");
    }

    /**
     * 关上冰箱门
     */
    public void closeDoor() {
        System.out.println("关上门");
    }
    public Fridge(){
    }
    public Fridge(String color, double price, String brand) {
        this.color = color;
        this.price = price;
        this.brand = brand;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }
}
Fridge fridge1 = new Fridge("黑色", 2333, "小米");
        fridge.put("饮料");

封装

就是将不想对外暴露的属性隐藏起来,对外提供一些方法供别人去操作,这样可以更安全,也可以提高代码的复用性

private

private是一个修饰符,它可以用来修饰类中的成员变量或者成员方法,被它修饰的成员只能在本类中访问,不能在其他类中直接访问

如果想进行访问私有的成员,必须要提供一套getset方法

this

this可以用来区分局部变量和成员变量同名的问题

this代表什么呢?
代表当前对象的引用。谁来调用这个方法,this就代表谁

public void setName(String name){
    this.name = name;
}

一个标准的类(JavaBean)

快捷键

构造方法.pngsetget.png

最后修改:2023 年 04 月 07 日
如果觉得我的文章对你有用,请随意赞赏