目录
行为:该类事物要做什么操作,或者基于事物的状态能做什么。对应类中的成员方法
2.1 引入
人认识世界,其实就是面向对象的。比如,我们认识一下美人鱼(都没见过)
经过“仔细学习”,发现美人鱼通常具备一些特征:
- 女孩
- 有鱼尾
- 美丽
这个总结的过程,其实是抽象化
的过程。抽象出来的美人鱼的特征,可以归纳为一个美人鱼类
。而图片中的都是这个类呈现出来的具体的对象
。
2.2 类和对象概述
类(Class)
和对象(Object)
是面向对象的核心概念。
1、什么是类
类:具有相同特征的事物的抽象描述,是抽象的
、概念上的定义。
2、什么是对象
对象:实际存在的该类事物的每个个体
,是具体的
,因而也称为实例(instance)
。
可以理解为:类 => 抽象概念的人
;对象 => 实实在在的某个人
3、类与对象的关系错误理解
曰:“白马非马,可乎?”
曰:“可。”
曰:“何哉?”
曰:“马者,所以命形也。白者,所以命色也。命色者,非命形也,故曰白马非马。”
2.3 类的成员概述
面向对象程序设计的重点是类的设计
类的设计,其实就是类的成员的设计
现实世界的生物体,大到鲸鱼,小到蚂蚁,都是由最基本的细胞
构成的。同理,Java代码世界是由诸多个不同功能的类
构成的
现实生物世界中的细胞又是由什么构成的呢?细胞核、细胞质、…
Java中用类class来描述事物也是如此。类,是一组相关属性
和行为
的集合,这也是类最基本的两个成员。
-
属性:该类事物的状态信息。对应类中的
成员变量
- 成员变量 <=> 属性 <=> Field
-
行为:该类事物要做什么操作,或者基于事物的状态能做什么。对应类中的
成员方法
- (成员)方法 <=> 函数 <=> Method
举例:
2.4 面向对象完成功能的三步骤(重要)
步骤1:类的定义
类的定义使用关键字:class。格式如下:.
[修饰符] class 类名{
属性声明;
方法声明;
}
举例1:
public class Person{
//声明属性age
int age ;
//声明方法showAge()
public void eat() {
System.out.println("人吃饭");
}
}
举例2:
public class Dog{
//声明属性
String type; //种类
String nickName; //昵称
String hostName; //主人名称
//声明方法
public void eat(){ //吃东西
System.out.println("狗狗进食");
}
}
public class Person{
String name;
char gender;
Dog dog;
//喂宠物
public void feed(){
dog.eat();
}
}
步骤2:对象的创建
- 创建对象,使用关键字:new
- 创建对象语法:
//方式1:给创建的对象命名
//把创建的对象用一个引用数据类型的变量保存起来,这样就可以反复使用这个对象了
类名 对象名 = new 类名();
//方式2:
new 类名()//也称为匿名对象
-
举例:
class PersonTest{
public static void main(String[] args){
//创建Person类的对象
Person per = new Person();
//创建Dog类的对象
Dog dog = new Dog();
}
}
步骤3:对象调用属性或方法
-
对象是类的一个实例,必然具备该类事物的属性和行为(即方法)。
-
使用"
对象名.属性
" 或 "对象名.方法
"的方式访问对象成员(包括属性和方法)
举例1:
//声明Animal类
public class Animal { //动物类
public int legs;
public void eat() {
System.out.println("Eating.");
}
public void move() {
System.out.println("Move.");
}
}
//声明测试类
public class AnimalTest {
public static void main(String args[]) {
//创建对象
Animal xb = new Animal();
xb.legs = 4;//访问属性
System.out.println(xb.legs);
xb.eat();//访问方法
xb.move();//访问方法
}
}
图示理解:![](https://i-blog.csdnimg.cn/blog_migrate/568ed8a7250d30c5b49b1a9dc3f9cf2d.png)
举例2:针对前面步骤1的举例2:类的实例化(创建类的对象)
public class Game{
public static void main(String[] args){
Person p = new Person();
//通过Person对象调用属性
p.name = "康师傅";
p.gender = '男';
p.dog = new Dog(); //给Person对象的dog属性赋值
//给Person对象的dog属性的type、nickname属性赋值
p.dog.type = "柯基犬";
p.dog.nickName = "小白";
//通过Person对象调用方法
p.feed();
}
}
2.5 匿名对象 (anonymous object)
-
我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象。
- 如:new Person().shout();
-
使用情况
- 如果一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
- 我们经常将匿名对象作为实参传递给一个方法调用。