一 面向对象
早期的程序设计经历了“面向问题”、“面向过程”的阶段,随着计算机技术的发展,以及所要解决问题的复杂性的提高,以往的程序设计方法已经不能适应这种发展的需求。于是,从 20 世纪 70 年代开始,相继出现了多种面向对象的程序设计语言(如图 所示),并逐渐产生了面向对象的程序设计方法。面向对象的程序设计涉及到对象、封装、类、继承及多态等几个基本概念。
1、 Java语言的基本元素:类和对象
何谓面向对象?
面向对象程序设计是将人们认识世界过程中普遍采用的思维方法应用到程序设计中。对象是现实世界中存在的事物,它们是有形的,如某个人、某种物品;也可以是无形的,如某项计划、某次商业交易。对象是构成现实世界的一个独立单位,人们对世界的认识,是从分析对象的特征入手的。
对象的特征分为静态特征和动态特征两种。静态的特征指对象的外观、性质、属性等;动态的特征指对象具有的功能、行为等。客观事物是错综复杂的,但人们总是从某一目的出发,运用抽象分析的能力,从众多的特征中抽取最具代表性、最能反映对象本质的若干特征加以详细研究。
- 人们将对象的静态特征抽象为属性,用数据来描述,在 Java 语言中称之为变量;
- 人们将对象的动态特征抽象为行为,用一组代码来表示,完成对数据的操作,在 Java语言中称之为方法。
- 一个对象由一组属性和一组对属性进行操作的方法构成。
1.1 面向对象的思想概述
类(Class)和对象(Object)是面向对象的核心概念。
- 类是对一类事物的描述,是抽象的、概念上的定义
- 对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。
将具有相同属性及相同行为的一组对象称为类。广义地讲,具有共同性质的事物的集合就称为类。
在面向对象程序设计中,类是一个独立的单位,它有一个类名,其内部包括成员变量,用于描述对象的属性;还包括类的成员方法,用于描述对象的行为。在 Java 程序设计中,类被认为是一种抽象数据类型,这种数据类型,不但包括数据,还包括方法。这大大地扩充了数据类型的概念。
类是一个抽象的概念,要利用类的方式来解决问题,必须用类创建一个实例化的类对象,然后通过类对象去访问类的成员变量,去调用类的成员方法来实现程序的功能。这如同“汽车”本身是一个抽象的概念,只有使用了一辆具体的汽车,才能感受到汽车的功能。
一个类可创建多个类对象,它们具有相同的属性模式,但可以具有不同的属性值。Java 程序为每一个类对象都开辟了内存空间,以便保存各自的属性值。
在java中万事万物皆对象
可以理解为:类 = 抽象概念的人;对象 = 实实在在的某个人
- 面向对象程序设计的重点是
类的设计
- 类的设计,
其实就是类的成员的设计
面向对象的程序设计有三个主要特征,如下:
封装性
继承性
多态性
2、Java类及类的成员
现实世界的生物体,大到鲸鱼,小到蚂蚁,都是由最基本的
细胞
构成的。同理,Java代码世界是由诸多个不同功能的
类
构成的。
常见的类的成员有:
-
属 性
:对应类中的成员变量 -
行 为
:对应类中的成员方法
Field = 属性 = 成员变量,Method = (成员)方法 = 函数
3、类的语法格式
修饰符 class 类名 {
属性声明;
方法声明;
}
说明:修饰符public:类可以被任意访问
类的正文要用{ }括起来
举例:
public class Person{
private int age ; //声明私有变量 age
public void showAge(int i) { //声明方法showAge( )
age = i;
}
}
4、创建Java自定义类
步骤:
- 定义类(考虑修饰符、类名)
- 编写类的属性(考虑修饰符、属性类型、属性名、初始化值)
- 编写类的方法(考虑修饰符、返回值类型、方法名、形参等)
二 类和对象
在Java中,类和对象是两个相关但不同的概念。
- 类(Class):类是对象的模板或蓝图,它定义了一组属性和方法来描述特定类型的对象。类是抽象的,是对一类对象的通用特征和行为的描述。例如,一个"Person"类可以定义人的属性(姓名、年龄等)和方法(吃饭、睡觉等)。
- 对象(Object):对象是类的一个具体实例。它是类的实例化,通过类创建出来的具体个体。对象是具体的,拥有类定义的属性值和方法行为。例如,基于"Person"类创建的一个具体人就是一个对象,具有自己的姓名、年龄和相关的行为。
类和对象的区分
在现实世界中,属于同一类的对象很多,类是抽象的,不是具体的,我们人习惯以对象的方式认识现实世界;
例如我说一辆汽车,那你脑海中立马就能够呈现出一辆汽车的模样吧,不管他是什么品牌、什么颜色、什么价格、什么参数等总而言之,都是一辆汽车,都是属于"汽车类"产品;
tips:类是抽象的,对象是具体的,对象是类的实例化;
类是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
-
属性:该事物的状态信息;
-
行为:该事物的功能信息;
类和对象的举例
-
类举例:
举例:猫类
属性:名字、体重、年龄、颜色; 行为:走、跑、叫;
-
实例化对象:
猫对象:
属性:旺财、8kg、6岁、棕色;行为:悄悄的走、飞快的跑、喵喵叫;
-
总结来说,类是对一类对象的通用描述,定义了对象的结构和行为;而对象是类的一个具体实例,具有类定义的属性和方法。
三 对象的创建和使用
1、创建对象
创建对象语法: 类名 对象名 = new 类名();
使用“对象名.对象成员
”的方式访问对象成员(包括属性和方法)
举例:
public class Animal {
public int legs;
public void eat(){
System.out.println(“Eating.”);
}
public viod move(){
System.out.println(“Move.”);
}
}
创建对象:
public class Zoo{
public static void main(String args[]){
//创建对象
Animal xb=new Animal();
xb.legs=4;//访问属性
System.out.println(xb.legs);
xb.eat();//访问方法
xb.move();//访问方法
}
}
2、Java 中类与对象
类(class),即具有相同或相似特征的某一类事物的统称。如人类,即“人”这一类事物,其所拥有共同的特征,如人都有发达的大脑、都直立行走、会思考、会劳动,所以才称为“人类”。
对象(object),类中某一特定的成员。如张三、李四,他们拥有人类所有的共同特征,同时还拥有个体特有的特征,如年龄、身高、姓名。
类是对象的抽象和概括;对象是类的实例化,是一个个具体的个体,一切事物皆对象。
说明:
如果创建了一个类的多个对象,对于类中定义的属性,每个对象都拥有各自的一套
副本,且互不干扰。
public class Zoo {
public static void main(String args[]) {
Animal xb = new Animal();
Animal xh = new Animal();
xb.legs = 4;
xh.legs = 0;
System.out.println(xb.legs); // 4
System.out.println(xh.legs); // 0
xb.legs = 2;
System.out.println(xb.legs); // 2
System.out.println(xh.legs); // 0
}
}
3、提 示
类的访问机制:
- 在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。
(例外:static方法访问非static,编译不通过。)
- 在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中
定义的成员。
4、对象的产生
Person p1 = new Person();执行完后的内存状态。其中类定义如下:
class Person{
int age;
void shout(){
System.out.println(“oh,my god! I am ” + age);
}
}
5、匿名对象
我们也可以不定义对象的句柄,而直接调用这个对象的方法。这
样的对象叫做匿名对象。
- 如:
new Person().shout();
使用情况
- 如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
- 我们经常将匿名对象作为实参传递给一个方法调用。
6、成员变量的默认值
数据类型 | 默认值 | |
---|---|---|
基本类型 | 整数(byte,short,int,long) | 0 |
浮点数(float,double) | 0.0 | |
字符(char) | ‘\u0000’ | |
布尔(boolean) | false | |
引用数据类型 | 数组,对象,String | null |
四 小练习
- 定义手机类并使用:
- 属性:品牌,价格,颜色;
- 行为:打电话,发短信
1)定义Phone类:
public class Phone {
//成员变量
String brand;
int price;
String color;
//成员方法
//打电话
public void call(String name){
System.out.println("给"+name+"打电话");
}
//发短信
public void sendMessage(){
System.out.println("大家新年好!");
}
}
2)定义测试类:
public class Demo02 {
public static void main(String[] args) {
//创建对象
Phone p=new Phone();
System.out.println("品牌: "+p.brand); // null
System.out.println("价格: "+p.price); // 0
System.out.println("颜色: "+p.color); // null
System.out.println("-------");
p.brand="华为";
p.price=2999;
p.color="银白色";
System.out.println("品牌: "+p.brand); //华为
System.out.println("价格: "+p.price); //2999
System.out.println("颜色: "+p.color); //银白色
System.out.println("------------");
p.call("刘德华");
p.sendMessage();
}
}