面向对象的相关概念
一、面向对象和面向过程的概念和关系
面向对象和面向过程都属于一种思考方式
面向对象侧重于 “谁来做”,以指挥者的角度思考问题,比较适合解决中大型的项目
面向过程侧重于“怎么做”,以执行者的角度思考问题,比较适合解决较小型的项目
面向对象和面向过程都属于一种思考方式
面向对象侧重于 “谁来做”,以指挥者的角度思考问题,比较适合解决中大型的项目
面向过程侧重于“怎么做”,以执行者的角度思考问题,比较适合解决较小型的项目
面向对象和面向过程不是完全独立的,而是相辅相成,不可分割
总结面向对象的思路:
1、根据“名词抽取法”抽取问题中涉及到的对象
2、根据问题中的需求,分析对象涉及到的属性和方法,进而根据共同点,往上抽取成“类”
3、创建类,编写属性和方法
4、根据类创建对象,并且使用对象的属性和方法!
1、根据“名词抽取法”抽取问题中涉及到的对象
2、根据问题中的需求,分析对象涉及到的属性和方法,进而根据共同点,往上抽取成“类”
3、创建类,编写属性和方法
4、根据类创建对象,并且使用对象的属性和方法!
二、类和对象的概念、关系和区别
1、概念
对象:客观世界中所有可以被描述的事物都称为对象。
类: 具有相同属性和方法的一组对象的集合
1、概念
对象:客观世界中所有可以被描述的事物都称为对象。
类: 具有相同属性和方法的一组对象的集合
2、关系
对象 是类的一个具体的实例
类 是对象所属的类型
对象 是类的一个具体的实例
类 是对象所属的类型
3、区别
对象 是具体的、实际存在的,可以操作的
类 是抽象的,模板式的,不可以直接操作的
对象 是具体的、实际存在的,可以操作的
类 是抽象的,模板式的,不可以直接操作的
类和对象的创建和使用
一、类的创建
1、声明类
2、编写里面的属性
3、编写里面的方法
1、声明类
2、编写里面的属性
3、编写里面的方法
public class A{
属性类型 属性名;
....
属性类型 属性名;
....
public 返回类型 方法名(){
}
}
二、对象的创建和使用
1、对象的创建语法(定义引用类型的变量)
类型 对象名 = new c;
int a = 值;
int a = 值;
2、对象的使用
①访问属性
对象.属性名=值;
syso(对象.属性名);
if(对象.属性名==值){}
①访问属性
对象.属性名=值;
syso(对象.属性名);
if(对象.属性名==值){}
②访问方法
对象.方法名();
对象.方法名();
三、类和对象的内存分配图
对象数组
一、理解:
数组的定义类型为对象类型
二、使用:
数组的定义类型为对象类型
二、使用:
动态初始化
1、声明并开辟空间
2、赋值
3、循环遍历数组中的每一个元素
1、声明并开辟空间
2、赋值
3、循环遍历数组中的每一个元素
静态初始化
1、声明并初始化
2、循环遍历数组中的每一个元素
1、声明并初始化
2、循环遍历数组中的每一个元素
对象关联
一、理解
一个对象中又引用了另一个对象
一个对象中又引用了另一个对象
其实就是 一个类中的属性类型为引用类型
包
一、包的创建
方式一:创建类时,同时指定包名
方式二:创建包
方式三:手动添加包的声明
二、包的命名
规则:合法的标识符+小圆点
规范:小写,遵循域名倒置
建议:com.项目名.业务模块名
三、包的使用特点
1、package关键字
声明包的语句:package 包名;
声明包的位置:必须在类的最上面
声明包的个数:至多有一个
2、import关键字
同一个包中的类,可以直接访问(创建对象)
跨包中的类,如果想访问(创建对象),【前提该类使用public修饰符】必须导入所在的包,语法:
import 包名.类名;或import 包名.*;
方式一:创建类时,同时指定包名
方式二:创建包
方式三:手动添加包的声明
二、包的命名
规则:合法的标识符+小圆点
规范:小写,遵循域名倒置
建议:com.项目名.业务模块名
三、包的使用特点
1、package关键字
声明包的语句:package 包名;
声明包的位置:必须在类的最上面
声明包的个数:至多有一个
2、import关键字
同一个包中的类,可以直接访问(创建对象)
跨包中的类,如果想访问(创建对象),【前提该类使用public修饰符】必须导入所在的包,语法:
import 包名.类名;或import 包名.*;
导入包的位置:package——import——class
导入包语句的个数:任意个,而且没有顺序
导入包语句的个数:任意个,而且没有顺序
访问修饰符
二、修饰类的成员
本类 本包 其他包的子类 所有包的所有类
private √ × × ×
缺省 √ √ × ×
protected √ √ √ ×
public √ √ √ √
private √ × × ×
缺省 √ √ × ×
protected √ √ √ ×
public √ √ √ √
三、修饰类
只有public和缺省才可以用于修饰类
缺省 √ √ × ×
public √ √ √ √
面向对象的特征之一:封装
一、封装的好处
1、提高代码的安全性
2、有利于程序日后的扩展,为继承和多态打下了基础
狭义的封装的好处:
避免了对属性的恶意赋值的危险!
1、提高代码的安全性
2、有利于程序日后的扩展,为继承和多态打下了基础
狭义的封装的好处:
避免了对属性的恶意赋值的危险!
二、封装的体现
1、将属性私有化
2、提供公共的set方法,用于更新属性
3、提供公共的get方法,用于读取属性
1、将属性私有化
2、提供公共的set方法,用于更新属性
3、提供公共的get方法,用于读取属性
规范:如果没有特殊要求,则实体类建议所有属性都进行封装!如果是只读,则仅仅提供get方法;如果是只写,则仅仅提高set方法。
this关键字
一、理解
代表当前类 的对象,用于访问当前类的属性、方法、构造
代表当前类 的对象,用于访问当前类的属性、方法、构造
二、语法
1、访问属性
this.属性名 = 值;
1、访问属性
this.属性名 = 值;
2、访问方法
this.方法名(实参列表);
this.方法名(实参列表);
3、访问构造器
this(实参列表);【要求 必须放在构造器的第一句!!!】
this(实参列表);【要求 必须放在构造器的第一句!!!】
三、好处
1、当局部变量和成员变量重名时,默认访问的是局部变量,如果想访问成员变量,则必须通过this关键字访问!
2、本类内部成员之间的访问,如果通过this去访问,语义性更强
3、如果需要访问本类的构造器,必须通过this关键字访问
4、当父类和子类的成员重名时,如果想访问本类的成员也可以通过this关键字,语义性更强!
1、当局部变量和成员变量重名时,默认访问的是局部变量,如果想访问成员变量,则必须通过this关键字访问!
2、本类内部成员之间的访问,如果通过this去访问,语义性更强
3、如果需要访问本类的构造器,必须通过this关键字访问
4、当父类和子类的成员重名时,如果想访问本类的成员也可以通过this关键字,语义性更强!
构造器
一、理解
属于类中 的第三大成员。本质上就是方法,也有方法体和方法名,只是没有返回类型,也不是通过对象显式调用
属于类中 的第三大成员。本质上就是方法,也有方法体和方法名,只是没有返回类型,也不是通过对象显式调用
二、语法 ★
修饰符 构造器名(参数列表){
构造器体
}
修饰符 构造器名(参数列表){
构造器体
}
注意:
1.构造器名和类名必须一致
2.没有返回类型
1.构造器名和类名必须一致
2.没有返回类型
三、特点
1、每个类都有构造器
2、如果类中没有显式的声明构造器,系统将默认提供一个无参构造器!
3、如果类中显式的声明了构造器,系统将不再提供构造器
1、每个类都有构造器
2、如果类中没有显式的声明构造器,系统将默认提供一个无参构造器!
3、如果类中显式的声明了构造器,系统将不再提供构造器
四、好处
1、用于创建本类对象的
2、进行一些初始化操作,提高代码的重用性
public 类名(){
}
public 类名(String name,int age){
this.name = name;
this.age=age;
}
1、用于创建本类对象的
2、进行一些初始化操作,提高代码的重用性
public 类名(){
}
public 类名(String name,int age){
this.name = name;
this.age=age;
}
来源:https://www.cnblogs.com/oldby/p/12579494.html