九天学会Java,第八天,面向对象
- 变量和数据类型,赋值和输出
- 算术运算
- 选择结构
- 循环结构
- 函数定义,函数调用
- 变量作用域
- 栈,程序运行的基石
- 面向对象 <---
- 异常处理
- 语言提供的公用包
为什么要有面向对象编程,因为万物皆是对象。
对象是我们描述/建模现实世界的最佳工具。
面向对象是一种思想,将功能封装进对象,强调具备了功能的对象。
举个例子:小汽车是一个对象没问题吧,这个对象有底盘,轮胎,车身,中控等属性。
除此之外,这个对象还具备一些动作,如前进,后退,转弯。
你看,用面向对象来描述世间万物是不是特别地流畅易懂。
说到面向对象,要澄清两个概念,一个是“类”,一个是“实例”。
类是具有相同特性和行为的对象集合,是一个抽象定义。
比如人类就是一个类,而实例是以类为模板,生成有意义的实体。
比如你,我,他都是人类的一个实例,这么类比应该好理解了吧。
先记住类的定义怎么写,参考下面伪代码:
class 类名{
数据类型 属性 ;
….
public 返回值的数据类型 方法名称(参数1,参数2…){
程序语句 ;
[return 表达式;]
}
}
类名
类名告诉计算机,我们对某一类事物进行了抽象,把共同的属性和行为提取出来,请看图:
第一只小黄猫,第二只小奶猫没问题吧。现在我们把它们都抽象成猫类,都有四肢,尾巴,能跑能吃。
此后,我们就有了猫类这个概念。如果还不能理解,请给我留言。
在src目录右键,New -> Java Class
输入Cat作为类名
/** Cat.java 文件
* 类名,Cat
* 这个类里什么都没定义
*/
public class Cat {
}
以上代码即定义了一个类,类名叫Cat
实例
前面提到的黄猫,奶猫都是猫类的实例。实例不是一个抽象概念,而是一个具体的物体。
在src目录右键,New -> Java Class
输入SeventhLessonOO
public class SeventhLessonOO {
public static void main(String[] args) {
/**
* 新建一个实例,该变量的名字叫milkCat
*/
Cat milkCat = new Cat();
}
}
Cat.java 和 SeventhLessonOO.java 都在src目录下
以上代码即实例化了一只奶猫。
构造函数
Java根据构造函数来生成实例。
为了举例说明构造函数怎么使用,修改Cat.java如下
public class Cat {
private String name; /* (1) 为了说明构造函数,我们修改Cat的定义,加入name成员变量 */
/**
* 这就是构造函数,这个函数没有返回值,也不需要在public后面写void
* 记住这个语法规则
*/
public Cat(String name) {
this.name = name; /* this关键字表示当前实例本身 */
/*
* 上面这句话的意思时,函数参数name的值,赋值给实例本身的name,即(1)处定义的private String name;
*/
}
}
如何调用构造函数
public class SeventhLessonOO {
public static void main(String[] args) {
/**
* 新建一个实例,该变量的名字叫milkCat
* 由于我们声明了构造函数,则必须使用构造函数
* 传入一个字符串参数
* "I m milkCat 会传递给参数name
*/
Cat milkCat = new Cat("I m milkCat");
}
}
以上就是调用构造函数的过程,如果还写new Cat();会报错。
因为我们已经声明了构造函数,那么就要按构造函数的定义来生成实例。
成员变量
我们说过,猫这个类,有四肢,有尾巴。现在我们再次修改类的定义
加入body成员变量
public class Cat {
private String name; /* (1) 为了说明构造函数,我们修改Cat的定义,加入name成员变量 */
private String body; /* 新加了body成员变量 */
/**
* 这就是构造函数,这个函数没有返回值,也不需要在public后面写void
* 记住这个语法规则
*
* 新加了body参数
*/
public Cat(String name, String body) {
this.name = name; /* this关键字表示当前实例本身 */
/*
* 上面这句话的意思时,函数参数name的值,赋值给实例本身的name,即(1)处定义的private String name;
*/
this.body = body;
}
}
成员函数
成员函数可以类比成这个类可以有什么动作。猫可以叫,可以跑
为了更好地直观感受成员函数,我们修改Cat这个类,让Cat这个类可以画一只猫
修改Cat.java
public class Cat {
private String name; /* (1) 为了说明构造函数,我们修改Cat的定义,加入name成员变量 */
private String body; /* 新加了body成员变量 */
/**
* 这就是构造函数,这个函数没有返回值,也不需要在public后面写void
* 记住这个语法规则
*
* 新加了body参数
*/
public Cat(String name, String body) {
this.name = name; /* this关键字表示当前实例本身 */
/*
* 上面这句话的意思时,函数参数name的值,赋值给实例本身的name,即(1)处定义的private String name;
*/
this.body = body;
}
/**
* 定义一个成员函数
* 通过System打印地方式输出猫的字符样子
*/
public void drawMyself() {
System.out.println("Ooooo I am " + this.name);
System.out.println(body);
}
}
修改main函数
public class SeventhLessonOO {
public static void main(String[] args) {
/**
* 新建一个实例,该变量的名字叫milkCat
* 由于我们声明了构造函数,则必须使用构造函数
* 传入一个字符串参数
* "I m milkCat 会传递给参数name
*/
String body =
" A_A" + "\n"
+ " (-.-)" + "\n"
+ " |-|" + "\n"
+ " / \\" + "\n"
+ "| | __" + "\n"
+ "| || | | \\___" + "\n"
+ "\\_||_/_/\n";
Cat milkCat = new Cat("I m milkCat", body);
/**
* 这句话让实例本身,调用成员函数,即
* 小奶猫把自己"画"出来
*/
milkCat.drawMyself();
}
}
程序输出:
Ooooo I am I m milkCat
A_A
(-.-)
|-|
/ \
| | __
| || | | \___
\_||_/_/
是不是有点意思