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));
    }
}

一、什么是类?什么是对象?

  1. 类:例如现实世界是由多种对象组成的,基于对象抽出类
  2. 对象:可以说是真是存在的单个的个体
  3. 类中可以包含:
    3.1、所有对象所共有的属性/特征-----------成员变量
    3.2、所有对象所共有的行为------------------方法
  4. 类的定义包括两部分:类声明和类体。
    举个栗子
    class 类名{
    	类体的内容
    }
    
  5. 一个类可以创建多个对象,同一类型所创建的对象,结构相同,数据不同。

二、类声明,类体,成员变量,方法

(一)、类声明

  • 类的名字要符合标识符规定,首字母必须大写
  • 类名做到见名知意,当类名由多个“单词”复合而成时,每个单词的首字母大写,如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_的博客】

猜你喜欢

转载自blog.csdn.net/qq_41254299/article/details/106611572