JavaSE进阶—面向对象(一)
一、什么是面向对象
面向对象方法是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO (Object-Oriented)方法,是建立在"对象"概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而类的继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。简单来说,面向对象的思想就是先考虑对象是否存在,再考虑对象与对象之间的关系。
二、类与对象
(一)类
类是对象的模板。即类是对一组有相同数据和相同操作的对象的定义,一个类所包含的方法和数据描述一组对象的共同属性和行为。例如人类就是对人这一类对象的共同总称。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类可有其子类,也可有其它类,形成类层次结构。例如,人类下面又可以分为不同的职业、不同的肤色、不同的国籍等等。
编写类:Java中类由class关键字修饰,这一点在前面的笔记中我们已经了解过了。创建类的语法格式为:
[访问权限修饰符] class 类名{ 代码块 }
例子如下:
public class Test{
//其中,public是访问权限修饰符,class为类关键字,Test为类名
//访问权限修饰符我们将在下文中介绍
}
(二)对象
对象是指要研究的任何事物。从一本书到一家图书馆,一棵树和一片森林,一个人和一群动物都可看作对象,它不仅能表示有形的实体,也能表示无形的规则、计划或事件。对象由数据(描述事物的属性) 和作用于数据的操作(体现事物的行为) 构成一独立整体。从程序设计者来看,对象是一个程序模块,从用户来看,对象为他们提供所希望的行为。
创建对象:创建对象我们在前面的笔记中已经了解过了,比如我们常用的从键盘录入Scanner对象,生成随机数的Random对象等等,语法格式如下:
数据类型(类名) 对象名 = new 构造函数(实参列表);
例子如下:
Random random = new Random();
Scanner scan = new Scanner(System.in);
Test t1 = new Test();
.......
(三)类中的成员
上面例子中,我们只是简单的创建了一个类,但是类中不包含任何的东西,这显然不符合我们编程的目的。其实,在以后我们Java代码中,标准类通常会有以下三部分组成,它们的定义、作用、语法等如下:
属 性
作用:描述对象静态特征
定义位置:类中方法以外
语法:
public 数据类型 属性名;
属性与局部变量的区别:
1,作用域不一样,属性可以在类中任何一个地方使用,只能在当前声明的代码块中
2,生命周期
属性随着对象的生成而生成,随着对象的销毁而销毁
局部变量随着所在的方法被调用而生成,随着方法的结束而销毁
3,属性有默认值,局部变量没有默认值
方法
作用:描述对象动态特征
定义位置:类中方法以外
语法:
public 返回值类型 方法名(形参列表){
方法体
}
构造函数
作用:创建该类对象,有名构造器、构造方法
特点:只能使用new关键字调用
语法:
public 构造函数名(形参列表){
方法体
}
构造函数名必须与类名一致
通过上述描述,我们可以再定义一个一个比较完整的类看看:
/**
下面我们以学生类为例,通常学生包含的属性有学号,姓名,性别、年龄等等
学生的行为有学习,吃饭等等
*/
public class Student{
//属性
private String id;//学生学号
private String name;//学生姓名
private char sex;//学生性别
private int age;//学生年龄
//构造函数
/**
无参构造器
*/
public Student(){
}
/**
全参数构造器
*/
public Student(String id,String name,char sex,int age){
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
public void setId(String id){
this.id = id;
}
public void setName(String name){
this.name = name;
}
public void setSex(char sex){
this.sex = sex;
}
public void setAge(int age){
this.id = id;
}
public String getId(){
return id;
}
public String getName(){
return name;
}
public char getSex(){
return sex;
}
public int getAge(){
return age;
}
/**
对象的动态特征,及方法
*/
public void study(){
System.out.println(name+"正在学习!!");
}
public void eat(String foodName){
System.out.println(name+"正在吃"+foodName);
}
}
通过上述代码,一个简单的学生类就创建完成了,下面让我们用一段代码测试一下吧。
package com.itxiaobai.oo;
public class Test {
/**
* 用于Student类的测试
*
*/
public static void main(String[] args) {
Student stu1 = new Student("2022001","张三", '女', 18);//通过全参构造器创建对象
stu1.study();//调用Student类中的方法
Student stu2 = new Student();//通过无参构造函数创建对象
stu2.setId("2022002");//通过生成器创建对象属性
stu2.setName("李四");
stu2.setSex('男');
stu2.setAge(20);
stu2.eat("肉夹馍!!");
}
}
通过运行上述代码,可以得到如下结果:
综上,一个简单地类与对象的实例就完成了,其中所涉及到的this、get/set方法、访问权限修饰符笔者将在下一篇笔记中讲到,想要了解的小伙伴请持续关注吧,内容有任何问题欢迎留言评论哦。