面向对象编程

OO:面向对象

OOP(Object-Oriented Programming):面向对象编程

面向对象编程的本质就是:以类的方式组织代码,以对象的方式组织(封装)数据

对于描述复杂的事务,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向对象的思路去处理。面向过程与面向对象是不可分割的。

抽象:抽取关键相关特性(属性和方法)构成对象,用程序的方法逻辑和数据结构 属性模拟现实的世界对象。例如:对于学生管理系统来说,学生对象拥有班级,学号,姓名,性别等属性,这就是一个抽象

三大特性

  • 封装
  • 继承
  • 多态

从认识论角度考虑是先有对象后有类。对象:是具体的事物。类:是对对象的抽象

从代码运行角度考虑是先有类后有对象。类是对象的模板

静态方法与非静态方法的调用

// 静态方法
// 通过方法名.类名进行调用
student.setname();

// 非静态方法
// 实例化这个类之后再调用
student s1 = new student();
s1.setname();
public static void main(String args[]){
	// 和类一起加载的
	public static void a();{
        b();	// 此处会报错,因为a()是随着类加载的,时间片很早,此时b()没实例化,并不会加载,所以调用不存在
    }
    // 类实例化之后才会存在
    public void b(){
        
    }
}

类与对象的关系

类:类是一种抽象的数据类型,他是对某一类事物的整体描述/定义,但是并不能具体代表某一个具体的事物

对象:对象是抽象概念的具体实例

对象是通过引用来操作的:栈 ——> 堆 (栈中存放的只是对象的名称或者引用,实际对象是存放在堆中的)

// Student.java
public class Student{
    // 包含的属性,字段
    String name;
    int age;
    String sex;
    
    // 包含的方法
    public void setName(String name){
        this.name = name;
    }
    public void setAge(int age){
        this.age = age;
    }
    public void setSex(String sex){
        this.sex = sex;
    }
}


// main.java
public class main{
    public static void main(String args[]){
        Student student = new Student();	// 实例化一个Student对象,名字为student,他拥有Student中的所有属性和方法
        student.setName("张三");
        student.setAge(21);
        student.setSex("男");
    	System.out.println(student.name);	// 张三
        System.out.println(student.age);	// 21
        System.out.println(student.sex);	// 男
    }
}

属性(成员变量)的默认初始化:

  • 数字: 0 0.0(浮点数)
  • char:u0000
  • boolean:false
  • 其他:null

构造器

一个类即使什么都不写,他也会存在一个方法,该方法为构造方法(构造器)

构造器:

  1. 和类名相同
  2. 没有返回值
public class Student{
    /*
    public Student(){	// 默认存在的构造函数(构造器)
        
    }
    */
}
  • 使用new关键字,本质是在调用构造器
  • 构造器一般用来初始化值

一旦定义了有参构造,无参构造就必须显示定义

// Student.java
public class Student{
    public Student(String name){
        this.name = name;
    }
    public Student(){

    }
}

// main.java
Student student = new Student();	// 此时如果在Student.java中不存在public Student(){}方法,则会报错
// 一旦定义了有参构造,无参构造就必须显示定义

IDEA中可以使用 alt + insert 来快速构造方法,alt + enter 自动补全代码。

对象的创建和使用

  • 必须使用new关键字创造对象,注意构造器的规则
  • 对象的属性 student.name
  • 对象的方法 student.setName();

类:

  • 静态的属性(即:属性)
  • 动态的行为(即:方法)