Java面向对象核心思想
引入
- 学习面向对象思想,首先头脑中有一个简单理念:需要完成某种任务时(或者需要实现某种功能时),首先想到的是让谁去完成(谁去实现),即哪个对象去完成任务(哪个对象去实现)。提到数据,首先想到的是这个数据是哪个对象的。
举个栗子:
package Test1;
import java.util.Arrays;
/*
* 面向过程:当实现一个功能的时候,每一个具体的步骤都要亲力亲为,详细处理每一个细节。
* 面向对象:当实现一个功能的时候,不需要关心具体的步骤,而是找一个已经具有该功能的人,来帮我做事。*/
public class Object_Oriented {
public static void main(String[] args){
int[] array = {10,20,30,40,50};
//输出数组元素,并且使用面向过程实现
System.out.print("[");
for (int i=0; i< array.length; i++){
if(i == array.length-1){
System.out.println(array[i] + "]");
} else {
System.out.print(array[i] + ", ");
}
}
System.out.println("==================");
//输出数组元素,并且使用面向对象实现
System.out.println(Arrays.toString(array));
}
}
一、什么是类?什么是对象?
- 类:例如现实世界是由多种对象组成的,基于对象抽出类
- 对象:可以说是真是存在的单个的个体
- 类中可以包含:
3.1、所有对象所共有的属性/特征-----------成员变量
3.2、所有对象所共有的行为------------------方法 - 类的定义包括两部分:类声明和类体。
举个栗子class 类名{ 类体的内容 }
- 一个类可以创建多个对象,同一类型所创建的对象,结构相同,数据不同。
二、类声明,类体,成员变量,方法
(一)、类声明
- 类的名字要符合标识符规定,首字母必须大写
- 类名做到见名知意,当类名由多个“单词”复合而成时,每个单词的首字母大写,如ChinaMade、UserName、UserId、WaterLake、UserInterfaceDao等(驼峰命名法)。
class UserName{
....
}
(二)、类体
- 类的目的就是抽象出一类事物共有的属性和行为,并用一定的语法格式来描述所抽象出的属性和行为。(类是一种用于创建具体实例(对象)的数据类型)。
- 类使用类体来描述所抽象出的属性和行为。
1.变量的声明:用来存储属性的值。
2.方法的定义:方法可以对类中声明的变量进行操作。
class Lader{
/**
* 变量声明
*/
float above; //梯形上底
float bottom; //梯形下底
float height; //梯形高
float area; //梯形面积
/**
* 定义
*/
float computerArea(){
area = (above + bottom)*height/2.0f;
return area;
}
//定义setHeight方法
void setHeight(float h){
height = h;
}
}
(三)、成员变量
- 类体中的内容可分为两部分:一部分是变量的声明;另一部分是方法的定义。声明变量部分所声明的变量被称为成员变量或者域变量。
- 成员变量的类型:可以基本类型(Java八大基本数据类型);还可以引用类型,例如:数组、对象和接口。
(四)、方法
- 一个类的类体有两部分组成:变量的声明和方法的定义。
- 方法的定义包括两部分:方法头和方法体。
- 方法头
//无参数的方法头
int speak(){
return 666;
}
//有参数的方法头
int add(int x,int y,int z){
return x+y+z;
}
- 方法体:包括局部变量的声明和Java语句
int getSum(int n){ //参数 n 变量是局部变量
int sum=0; //声明局部变量 sum
for(int i=1; i<=n; i++){
sum += i;
}
return sum;
}
- 区分成员变量和局部变量
1.成员变量有默认值,局部变量没有默认值。
2.若局部变量和成员变量的名字相同,那么成员变量被隐藏,即该成员变量这个方法内暂时失效。如果想在该方法中使用被隐藏的成员变量,必须用关键字 this 调用。
3.成员变量在整个类中有效
/**
* 创建一个个类A
*/
public class A{
int m = 10, sum = 0; //成员变量,在整个类中有效
void Jisuan(){
for(int i=0; i<m; i++){
sum += i;
}
}
}
三、方法的重载
1.方法的签名:
- 方法名 + 参数列表
2.重载
- 在同一个类中,方法名相同,参数列表不同(这里指类型或参数的个数不同)和方法体不同;
- 编译器在编译期间是方法的签名自动绑定调用方法。
- 方法的重载是面向对象编程三大特性中的多态的一种表现。(面向对象三大特性后续文章会讲到)
- 举个栗子
- 呼叫小王同时,我再呼叫小明
3.总结
* 调用过程中,减少列表长度
* 方法的重载只是对原有方法的一种升级,所以方法名相同可以方便原有使用
* 方便了程序员可以根据不同的参数个数,顺序,类型,自动匹配方法,减少写过个函数名或方法名的重复步骤。
四、构造方法
1.构造方法是类中的一种特殊方法
构造方法的主要作用就是创建对象;
2.构造方法也可以成为:构造器;
* 有成员变量时必须要赋值初始化;
* 与类同名,没有返回值类型(包括也无 void);
```java
public class Point {
int x,y;
String str;
Point(){//构造方法
x=1;
y=1;
}
Point(int a, int b, String ch) {//不是构造方法(该方法的类型是 void)
x = a;
y = b;
str = ch;
}
}
```
* 在创建(new)对象时自动调用相对应的构造器;
* 若不写构造方法,则编译器默认一个无参的空构造方法,若写构造方法,则不再默认提供;
* 构造方法可以重载。
![构造方法可重载](https://img-blog.csdnimg.cn/20200615100004560.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMjU0Mjk5,size_16,color_FFFFFF,t_70)
3.构造方法中的 this 使用
- this 关键字出现在类的构造方法中,代表使用该构造方法所创建的对象。
- 指代当前对象,哪个对象调用方法它指的就是哪个对象(只能在方法中,不能出现在类方法,即静态方法),且必须是第一条语句。
五、对象的创建
- 创建对象一般分为两个步骤:1.对象的声明,2.对象分配变量
- 第一种创建对象的方法,先声明对象名,然后再创建
- 第二种创建对象的方法,创建对象同时声明对象名
- 第一种创建对象的方法,先声明对象名,然后再创建
面向对象三大特性
- 封装:对于类而言是对属性和行为的封装,对于方法而言是对一段特定逻辑功能的封装,对应属性而言,对其访问权限的封装;
- 继承:子类继承父类,子类便可以拥有父类中所有(私有除外)的属性和行为,并且子类可以修改父类中的方法,使其合适特殊需求。
- 多态:不同对象对同一个消息作出不同的响应,即一个类型多种实现:如,向上造型。
后续的内容请耐心等等,马上就来!写作不易请点个赞3Q
转载请注明出处:https://blog.csdn.net/qq_41254299
本文出自【Superclover_的博客】