永不服输的Java之路---重学Java (第六章) 上篇

空扰寡人 提交于 2019-12-02 06:39:24

如若文章中出现冲突,或者出现错误,请联系 QQ:2669157689 指出我的问题。谢谢~

介绍面向对象编程的基本思想,通过本课的学习,我们应该掌握如下知识:

  1. 理解什么是类、对象、构造器,
  2. 对象在内存中的表现形式及如何使用对象等。
  3. this和static关键字

JAVA编程基础 —— 面向对象基础

1. 面向对象编程思想

  1. 面向过程编程
    传统的C语言属于面向过程编程。面向过程解决问题的思路:通常是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,最后一个一个依次调用函数来解决。
    案例:ATM提款机终端系统(面向过程编程)
    步骤1:输入密码,系统判断是否正确,如正确,进入取款界面,如错误,提示重新输入。
    步骤2:进入取款界面,输入取款金额,系统判断余额是否足够,如不足,提示;如足够,点钞。
    步骤3:吐出钞票,打印票据。
    面向过程编程考虑的问题是程序运行的流程,主要是程序的算
    法,而数据只是在必要的时候插入到算法中间。
  2. 面向对象编程(OOP:Object-Oriented Programming)
    从现实世界中客观存在的事物出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。面向对象解决问题的思路:通常是把构成问题域的事务分解成各个对象,给对象赋予相应的属性和行为,通过多个对象的相互协调来解决问题。建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为 。支持面向对象编程是Java 语言的重要特点。
    案例:ATM提款机终端系统(面向对象编程)
    根据要解决的问题,可以抽象出如下对象:
    ① 客户
    ② 银行卡
    ③ 现金
    ④ 票据
    这些对象没有先后顺序,共同作用才构成了整个系统。我们只要用代码设计出这几个类型的对象,然后让他们互相通信、传递消息就可以完成系统功能。
  3. 面向对象编程思想实际上就是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统的软件开发方法。
  4. 面向过程与面向对象的差别
    面向过程:
    ① 系统以过程/函数为中心来组织
    ② 过程间相互发送数据
    ③ 过程的执行动作与数据被明显的分离
    ④ 关注的焦点在于数据结构、算法和执行步骤
    ⑤ 过程通常难以被复用。
    面向对象:
    ① 系统以对象为中心来组织
    ② 对象相互间发送消息
    ③ 相关的属性和行为被统一到对象上
    ④ 关注的焦点是对象及对象的职责
    ⑤ 使得系统构建更容易,易维护,易扩展,易复用
    ⑥ 解决问题的方式更接近人的思维方式,使人更容易理解
    从面向过程到面向对象,不仅仅是编程方式的改变,更重要的是思考方式的改变。
  5. 面向对象基本概念
    抽象(abstract):
    ① 从事物中舍弃个别的非本质特征,抽取共同的本质特征
    ② 只考虑与问题域相关的信息,而忽略与问题域不相关的部分
    对象(object):
    ① 可以是有形的,也可以是无形的(如一个客户,一张银行卡,窗体中的一个按钮等等)
    ② 对象是构成世界的一个独立单位
    ③ 具有自己的静态结构(属性)和动态行为(方法)
    ④ 每个对象有自己的唯一标识
    类(class):
    类是一组具有相同属性和行为的对象的抽象,类的作用是用来创建对象,对象是类的一个实例
    类和对象的关系:
    ① 抽象和具体的关系
    ② 每一个类在某一时刻都有零个或更多的实例, 类是生成对象的模板
    ③ 一个类定义了使用哪些数据来描述属性,每一个对象都有相应的属性值数据,一个类通过一系列方法来定义行为,这些方法能在每个对象中被激活
  6. 面向对象主要特征
    封装(encapsulation):
    ① 所谓封装是把对象的属性和行为结合在一个独立的系统单位内部
    ② 尽可能隐蔽对象的内部细节,只向外部提供接口
    ③ 降低对象间的耦合度
    ④ 封装的重要意义:使对象能够集中而完整地描述并对应一个具体事物;体现了事物的相对独立性,使对象外部不能随意存取对象的内部数据
    继承(inheritance):
    ① 也称泛化,继承性是子类自动共享父类属性和方法的机制,在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入自己若干新的内容
    ② 继承简化了人们对事物的认识和描述,有益于软件复用,是OO技术提高软件开发效率的重要原因之一
    ③ 是类之间的一种关系,一般类与特殊类之间的关系
    ④ 继承关系的语义:" is a kind of "
    多态(polymorphism):
    ① 指同一个命名可具有不同的语义
    ② OO方法中,常指在一般类中定义的属性或方法被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为,对于子类,可用不同的方法替代实现父类的服务的方法

2. 类的定义

  1. 什么是类
    类的定义:
    ① 把相似的对象划归成一个类
    ② 在软件设计中,类,就是一个模板,它定义了通用于一个特定种类的所有对象的属性(变量)和行为(方法)
    举例(西游记游戏软件中的游戏人物,数据是虚构的):
    ① 孙悟空:孙悟空的武器是金箍棒,战斗力五颗星,耐力五颗星
    ② 唐僧:唐僧没有武器,战斗力为零,耐力五颗星
    ③ 猪八戒:猪八戒的武器是耙子,战斗力五颗星,耐力两颗星
    ④ 沙僧:沙僧的武器是月牙铲,战斗力三颗星,耐力四颗星
  2. 类的格式
    ① 修饰符一般为 public ,也可以没有修饰符
    ② 注意类名的命名规范,类名一般首字母大写
    ③ 类的成员:成员变量(属性),成员方法(方法),嵌套类
    ④ 通过 " . " 调用属性和方法
    ⑤ 类的定义举例(具体实例):
public class Student {
	private String name;
	private char sex;
	private double score;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public char getSex() {
		return sex;
	}

	public void setSex(char sex) {
		this.sex = sex;
	}

	public double getScore() {
		return score;
	}

	public void setScore(double score) {
		this.score = score;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", sex=" + sex + ", score=" + score + "]";
	}

	public void showInfo() {
		System.out.println("学生的名字是:" + name + ",性别是:" + sex + ",成绩是:" + score);
	}

	public Student(String name, char sex, double score) {
		super();
		this.name = name;
		this.sex = sex;
		this.score = score;
	}

	public Student() {
		super();
	}
}
  1. 类成员的定义
    ① 成员变量:[修饰符] 类型 属性名=[默认值];
    其中修饰符有:public、private、protected,也可以省略不写
    ② 方法:
    [修饰符] 返回值类型 方法名(形参列表)
    {
    语句
    }
  2. 方法的定义
    ① 方法:方法是完成某个功能的一组语句,通常将常用的功能写成一个方法
    示例:Function_sample1.java
    ② 方法的格式:
    [访问控制符] [修饰符] 返回值类型 方法名(参数类型 形式参数,参数类型 形式参数,…)
    {
    方法体
    }
    ③ 方法的格式
    形式参数:在方法被调用时用于接收外部传入的变量
    参数类型:就是该形式参数的数据类型
    返回值:方法在执行完毕后返回给调用它的程序的数据
    返回值类型:方法要返回的结果的数据类型
    ④ 方法的分类
    根据有参个数:有参方法、无参方法
    根据返回值类型
    1.有返回值的方法:基本数据类型、引用数据类型
    2.无返回值的方法:void
  3. 方法的调用
    ① 方法的调用
    方法只有在被调用后才生效,调用方法:
    1.无参方法的调用: 方法名( );
    2.有参方法的调用举例:
public int add(int x, int y) {
	int z = x + y;
	return z;
}

public static void main(String[] args) {
	int x = fd.add(10, 20);
	System.out.println(x);
	int y = fd.add(100, 200);
	System.out.println(y);
}
  1. 方法的重载
    方法的重载就是在同一个类中允许同时存在一个以上同名的方法
    方法重载的规则:
    ① 方法名称相同
    ② 方法的参数必须不同:参数个数不同或者参数类型不同
    ③ 方法的返回值类型可以相同,也可以不同
    ④ 举例:
public int getSum(int end) {
	int sum = 0;
	for (int i = 1; i <= end; i++) {
		sum += i;
	}
	return sum;
}

public int getSum(int start, int end) {
	int sum = 0;
	for (int i = start; i < end; i++) {
		sum += i;
	}
	return sum;
}
  1. 方法应该注意的问题
    ① 形参必须注明数据类型
    ② 实参直接写,不需要类型声明
    ③ return只能返回一次
    ④ 遇到return语句,方法结束执行,后续语句不执行
    ⑤ 方法的返回值,必须与方法声明中的返回值类型匹配
    ⑥ 方法定义,不能写在main()中
    ⑦ 方法是不能嵌套的

太长了,分两篇来发表吧。。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!