类和对象概念

对象用计算机语言对问题域中事物的描述,对象通过“属性(attribute)”和“方法(method)”来分别对应事物所具有的静态属性和动态属性。

类:类是一类对象的模板,它描述一类对象的行为和状态。类是用于秒书同一类型的对象的一个抽象概念,类中定义了这一类对象所因具有的静态和动态属性。

对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。

类(对象)之间的关系

关联关系

继承关系(一般和特殊)

XX是一种XX

聚合关系(整体和部分)

实现关系

面向对象思想

面向对象的基本思想是从现实世界中客观存在的事物出发来构造软件系统,并在系统中构造中尽可能运用人类的自然思维方式。

面向对现象更加运用人类在日常思维逻辑中经常采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。

面向对象设计的思想时,应考虑以下三个问题:

  1. 考虑在这个问题中有哪些类和对象
  2. 考虑这些类和对象有哪些属性和方法
  3. 考虑类和类之间有哪些关系

Java与面向对象

  • 对象时Java程序的核心,在Java程序中“万事万物皆对象”
  • 对象可以看做时静态属性(成员变量)和动态属性(方法)的封装体
  • 类时用来创建同一类型的对象的“模板”,在一个类中定义了该类对象所具备的成员变量以及方法
  • J2SDK提供了很多类 供编程人员使用,编程人员也可以定义自己的类。
  • 成员变量=属性、方法=函数

下面用一个简单的类来理解下Java中类的定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Dog{
String breed;
int age;
String color;
void barking(){
}

void hungry(){
}

void sleeping(){
}
}

为什么用对象?

面向对象的编程——一组对象相互配合通过沟通完成特定功能

​ 所有的paradigm都是对现实问题的抽象

​ 汇编时对机器语言的抽象

​ 面向过程的语言时对汇编的抽象

​ 对象更加符合对于现实问题的抽象

对象都有对外服务的接口

​ 通过继承可以复用(reuse)

对象隐藏内部服务的实现

​ 通过聚合可以复用(reuse)

面向对象更加容易使我们达到这些年来苦苦追求的境界

​ Reusable、Extensibility、维护和替换更加方便、…

组件——比对象更高的层次上的抽象(二进制级别)

​ EJB、Web Service、CORBA、COM、…

Java 的类

类的定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//用class关键字定义一个类,例如:
class Person{
//成员变量定义
private int id;
private int age=20;

/*声明成员变量的格式为:
private int id; private int age=20;*/

//方法定义
public int getAge(){
return age;
}
public void setAge(int i){
age=i;
}
public int getId(){
return id;
}

/*声明方法的格式为:
public int getAge(){
return age;
}*/
}

类的定义主要包含三种类型变量:

局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。

成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。

类变量:定义在类中,方法体之外,但必须要有 static 来声明变量类型。静态成员属于整个类,可通过对象名或类名来调用。

构造方法(构造函数)

每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。

在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。

  • 使用new+构造方法 创建一个新的对象
  • 构造函数是定义在Java类中的一个用来初始化对象的函数
  • 构造函数与类同名(包括大小写),没有返回值,不能有void也不可
1
2
3
4
5
6
7
8
9
10
//类名
public class Person{
int id;
int age=20;
//构造方法名
Person(int _id, int _age){
id=_id;
age=_age;
}
}
  • 创建对象时,使用构造函数初始化对象的成员变量。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package constructor;

public class person{

int id;
int age=20;

person(int _id, int _age){
id=_id;
age=_age;
}

public static void main(String args[]){
person tom = new person(1,25);
Point P = new Point();
}
}

class Point{
Point(){}
int x;
int y;
}
  • 当没有指定构造函数时,编译器为类自动添加形如 类名(){ } 的构造函数

  • 则一旦指定构造函数,编译器则不会自动添加

Java面向对象基本概念——引用

即一小块内存只占一大块内存

类和对象的关系

内存分析

方法的重载

定义

如果有两个方法的方法名相同,但参数不同,那么可以说一个方法是另一个方法的重载。

Tips:

命名规则!!!

  • 类名的首字母大写

    ​ eg: HelloWorld、Person、Dog

  • 变量名和方法名的首字母小写

    ​ eg:变量名 int i; int j; int furColor;

  • 运用驼峰命名法

创建对象

使用new来创建一个新的对象需要三步:

1.声明:其中包括对象名称和对象类型

2.实例化:使用new关键字来创建一个新的对象 eg:Circle c1=new Circle()

3.初始化:使用new创建对象时会调用构造方法初始化对象

1
2
3
Circle c1=new Circle()  //实例化对象
c1.成员变量名称; //访问类种的变量
c1.方法名(); //访问类中的方法

Circle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Circle{
double radius = 1.0;
double getArea(){
return radius * radius * 3.14;
}

public static void main(String[] args){
Circle c1 = new Circle();
System.out.println("circle1的面积是:" + c1.getArea());

c2.radius = 15;
Circle c2 = new Circle();
System.out.println("circle2的面积是:" + c2.getArea());
}