面向对象(类与对象)
类与对象
类与对象的关系
类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物。
类和对象:在面向对象中,类和对象是最基本、最重要的组成单元。类实际上是表示一个客观世界某类群体的一些基本特征抽象。对象就是表示一个个具体的东西。所以说类是对象的抽象,对象是类的具体。
类是概念上的,它的作用则是赋予对象特性,从而形成一个实体,即对象是一个真实的模型,所以综上所述:类是描述了一组有相同特性(属性)和相同行为(方法)的一组对象的集合。
对象是抽象概念的具体实例
结论:类是对象的抽象,对象是类的具像(实例)
例如:我现在创建一个学生类,这个类包含了学生的属性比如说学号、所在学校、姓名、年龄,行为(方法)
如下:
public class Student {
/**
* 属性
*/
String id;
String school;
String name;
String age;
/**
* 方法行为
*/
public void study(){
System.out.println(name+"在学习");
}
}
学生类定义之后有什么用处呢?
首先:类是一种抽象的数据类型,它是对某一类事物整体描述/定义。
比如说小明的身份是一名学生,他就具有学生该有的基本身份信息。学生类的作用就是将这些该有的基本信息定义出来,同时还包含了学生可能会有的方法和行为。
当我们创建一个具体的学生对象(小明),我们就可以对他的基本信息进行填写赋值,同时小明如果现在正在学习,我们可以把这个方法和行为定义给他。
创建与初始化对象
使用new关键字创建对象
使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象,进行默认的初始化,以及对类中构造器的调用
例如:接着上面的继续说,学生类创建好后,我们可以开始从抽象的概念中具体化一个真正的对象,如下代码:
public class Application {
public static void main(String[] args) {
/**
* 类 ->对象(实例化),从抽象的概念中具象化一个真正的对象
* 使用new关键字来实例化对象
* 本质是在JVM内存堆空间中创建一个学生对象,并且把该空间对应的内存地址赋 值给student(对象名),然后存储在栈中
*/
Student student1 =new Student();
/**
* 访问学生对象属性
* 属性如果没有赋值,则自动使用对应数据类型的默认值
* 赋值属性
*/
student1.name="Jano";
student1.age="23";
/**
* 获取属性
*/
System.out.println(student1.name);
System.out.println(student1.age);
/**
* 调用方法
*/
student1.study();
从上面的代码可以看出,我们创建好对象学生Jano后,他就具有了学生属性和方法,我们可以对他的属性进行具体的赋值,同时还可以调用在学生类中已经定义好了的方法给Jano。
通过类与对象的关系以及对象的创建我们可以初步的了解面向对象编程这个概念,以类的方式组织代码,以对象的组织封装数据。从上面的代码可以看出如果创建多个对象的话,我们就需要重复的给创建的对象定义名字,年龄,这些属性,那么如何简便这些操作呢,这里我们引入一个构造器的概念。
构造器(初始化对象)
类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。
使用new关键字,本质是在调用构造器
特点:
1.必须和类的名字相同
2.必须没有返回类型,也不能写void
作用
初始化对象的值
类别
无参构造:注意:一个类即使什么都不写,也会存在一个构造器(JVM会默认提供)
有参数构造:注意:有参构造可以有多个!!一旦定义了有参构造就必须显示无参构造否则无效,以为定义有参构造之后JVM不会默认提供无参构造了,所以必须自己手动添加上。
了解完构造器的基本概念之后,用下面代码来演示实际的用法:
学生类(利用有参构造)
public class Student {
/**属性*/
String name;
int age;
//空参构造
public Student() {
}
//有参构造
public Student(String newName, int newAge) {
//给属性赋值
name = newName;
age = newAge;
}
/**方法(行为)*/
public void study() {
System.out.println(name + ",在学习...");
}
}
测试:
public class TestStudent {
public static void main(String[] args) {
//创建对象的本质就是调用构造方法
Student s1 = new Student("jack",23);
Student s2 = new Student("rose",21);
}
通过上面的代码可以看出,最开始我们没有使用有参构造的时候只有无参构造的时候(当一个类中没有其他构造方法时,无参构造方法会自动产生),给对象初始化值十分的繁琐,需要重复的写。当我们加入了有参构造的时候我们在new对象的同时就调用了有参构造并且还初始化了值大大减少了代码量。
总结
通过上面对类与对象的关系,创建对象,构造器(初始化对象)的学习我们可以初步的了解面向对象编程,但是我们如果仅仅只了解这些是不够的,在使用的过程中我们可以发现,当我创建一个学生对象的时候赋予了他基本的属性比如说叫什么名字,年纪,性别,但是当我创建之后,他这些属性可以被随意的改变,也就是说任何人都可以去修改比如性别这个属性,这是非常不安全的,我们需要改变这样的情况,如何去做呢?,我们可以这样想,当对象被创建后,如果想去改变它的一些属性必须要调用某种方法才可以实现,要不然就无法改变和访问到他的属性,而且这种方法我们可以设定在什么样的情况之下他才可以使用,否则不能使用,这大大的提高了安全性,这就是下一章将要学习的面向对象的特点--封装

浙公网安备 33010602011771号