类和对象
-
面向对象程序设计是:
-
将数据及对数据的操作封装在一起,成为一个不可分割的整体
-
同时将具有相同特征的对象抽象成一种新的数据类型—类
-
-
面向对象和面向过程的区别:
面向过程 面向对象 设计思路 自顶向下、层次化、分解 自底向上、对象化、综合 程序单元 函数模块 对象 设计方法 程序 = 算法 + 数据结构 程序 = 对象 = 数据 + 方法 优点 相互独立,代码共享 接近人的思维方式 模拟客观世界 缺点 数据与程序不一致 维护困难 客观世界的无序性 概念不成熟 -
在面向对象程序设计中,抽象数据类型是用“类”来代表的;
Java是面向对象语言,类是客观事物的抽象 , 而对象是类的实例;
-
面向对象最重要的三大特征是:封装、继承、多态;
-
封装就是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别,将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。继承机制允许创建分等级层次的类;
-
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为;
-
多态同一个行为具有多个不同表现形式或形态的能力。是指一个类实例(对象)的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口;
-
-
类:
-
类的名字由大写字母开头而单词中的其他字母均为小写;如果类名称由多个单词组成,则每个单词的首字母均应为大写,把这些单词连接在一起,即不要使用下划线分割单词,例如:OrderList;
-
如果类名称中包含单词缩写,则这个所写词的每个字母均应大写,如:XMLExample;
-
声明方式:
【访问权限修饰符】【修饰符】 class 类名 {
成员列表
}
-
-
成员变量:
-
成员变量是类中特有的属性变量;
-
成员变量的类型可以是Java中任意的数据类型,包括基本数据类型,类,接口,数组等;
-
在类中声明成员变量的格式:
【变量修饰符】 【变量数据类型】 变量名1,变量名2【=变量初值】…;
-
-
属性:
-
成员变量的类型可以是Java中任意的数据类型,包括基本类型,类,接口,数组等;
-
声明方式:
【访问权限修饰符】【修饰符】 数据类型 属性名(=值);
-
-
方法:
-
访问修饰符:public、protected、 默认的(同包资源可以访问)、private(只有当前类可以访问) 。注意:方法一般用public;
-
修饰符:static等;
-
返回值类型:如果方法需要有返回值,我们就写返回相应的类型名,并且再方法体中应该返回相应的数据类型的值,如果没有返回值,返回类型写void;
-
声明方式:
【访问修饰符】【修饰符】返回值类型 方法名称(参数){
**//执行 **
Return 返回值;
}
-
-
在Java中万事万物皆对象
事实上,Java离完全的面向对象编程语言还有最后的一小步距离,因为Java中存在基本数据类型,而后续以Java为目标的语言如C#则真正实现了万物皆对象,Java用包装类型来应对;
-
对象依赖于类存在(模板-个体实例)
-
在程序中应该使用的是对象
-
分析过程先有对象后有类;开发过程先有类后有对象
-
-
类是描述对象的“基本原型”,它定义一种对象所能拥有的数据和能完成的操作;
-
在面向对象的程序设计中,类是程序的基本单元,最基本的类由一组结构化的数据和在其上的一组操作构成;
-
类是同等对象的集合与抽象。它是一块创建现实对象的模板。
-
对象是类的实例,对象是面向对象编程的核心部分,是实际存在的具体实体,具有明确定义的状态和行为;
-
一个完整的类:
-
-
在程序中使用对象,要了解对象的三个主要特征:
- 对象的行为:可以对对象施加哪些操作或方法;
- 对象的状态:当施加那些方法时,对象如何响应;
- 对象的标识:辨别具有相同行为与状态的不同对象;
-
对象是典型的引用数据类型,因此和数组相似,初始化时需要使用new运算符从堆中分配内存;
- 步骤是:
- 说明新建对象所属的类名;
- 说明新建对象的名字;
- 用new为新建对象开辟内存空间;
- 使用已经定义好的类,创建该类对象的过程称为“实例化”;
- new是“为新建对象开辟内存空间”的运算符;它以类为模板,开辟空间并实例化一个对象,返回对该对象的一个引用(即该对象所在的内存地址);
- 使用成员运算符(.)来访问成员,使用对象.成员属性或者成员方法;
- 创建对象的一般语法是:类名 引用名 = new 类名( ) ;
实例代码:
public class Student{ //属性:【访问权限修饰符】 数据类型 属性名 int id;//学号 String name;//姓名 String schoolName;//学校名称 double score;//分数 //方法一:学习 public void study(){ System.out.println("学生正在学习"); } //方法二:吃饭 public void eat(){ System.out.println("学生正在吃大餐"); } //方法三:睡觉 public void sleep(){ System.out.println("学生正在睡大觉"); } //方法四:敲代码 public void writeCode(){ System.out.println("学生敲了一夜代码"); } }
public class StudentTest { public static void main(String[] args) { //创建对象 Student student1=new Student(); //为对象赋值 student1.name="张三"; student1.id=20200814; student1.score=88; //输出对象信息 System.out.println("学生id:"+student1.id); System.out.println("学生姓名:"+student1.name); System.out.println("学生分数:"+student1.score); //调用方法 student1.eat(); student1.sleep(); student1.study(); student1.writeCode(); } }
- 步骤是:
-
封装是与对象有关的一个重要概念
-
形式:将数据和行为组合在一起,并对对象的使用者隐藏数据的实现方式;
-
属性由变量表示,属性名称由类的每个对象共享;
-
每个特定的对象都有一组特定的实例属性值,这些值的集合就是这个对象的当前状态,只要向对象发送一个消息,它的状态就有可能发生改变;
-
要不违背封装特性,应该将属性私有化;
-
this代表的是指向自身的一个引用;
实例代码:
public class Student{ //属性:【访问权限修饰符】 数据类型 属性名 //为了满足f封装的思想,将数据隐藏,而将属性私有化 private int id;//学号 private String name;//姓名 private String schoolName;//学校名称 private double score;//分数 //通过get,set方法间接访问属性 //设置各个属性的get方法 public String getName(){ return name; } public int getId(){ return id; } public double getScore(){ return score; } public String getSchoolName(){ return schoolName; } //设置各个属性的set方法 public void setId(int id) { //This代表的是指向自身的一个引用 //属性=参数 this.id = id; } public void setName(String name) { this.name = name; } public void setSchoolName(String schoolName) { this.schoolName = schoolName; } public void setScore(double score) { this.score = score; } //方法一:学习 public void study(){ System.out.println("学生正在学习"); } //方法二:吃饭 public void eat(){ System.out.println("学生正在吃大餐"); } //方法三:睡觉 public void sleep(){ System.out.println("学生正在睡大觉"); } //方法四:敲代码 public void writeCode(){ System.out.println("学生敲了一夜代码"); } }
public class StudentTest { public static void main(String[] args) { //创建对象 Student student1=new Student(); //通过get,set方法间接访问属性 //为对象赋值 student1.setId(20200815); student1.setName("张三"); student1.setScore(88); //输出对象信息 System.out.println("学生id:"+ student1.getId()); System.out.println("学生姓名:"+ student1.getName()); System.out.println("学生分数:"+ student1.getScore()); //调用方法 student1.eat(); student1.sleep(); student1.study(); student1.writeCode(); } }
-