基本概念
- 面向对象(Object Oriented)是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为
- 面向对象将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做
- 面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等
特征
-
封装
封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内,提高复用性和安全性
-
继承
继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。继承性是面向对象程序设计语言不同于其他语言的最重要的特点
-
多态
多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性
-
抽象(可选)
抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类
类和对象
- 类:是一个模板,对一类事物的描述,它描述一类对象的行为和状态。例如,狗类、猫类等
- 对象:对象是类的一个具体实例,是实际存在的该类事物的一个个体。例如,一条狗是一个对象,它的状态有名字、颜色、品种;行为有:摇尾巴、叫、吃等。
Java中的类
类可以看成是创建Java对象的模板,一个类包含以下成员:
- 属性
- 行为
Field = 属性 = 成员变量,Method = (成员)方法 = 函数
public class Dog {
String name; //姓名属性
int age; //年龄属性
String color; //颜色属性
public void barking() { //叫的行为
System.out.println("狗可以叫");
}
public void running() { //跑的行为
System.out.println("狗可以跑");
}
public void sleeping() { //睡觉的行为
System.out.println("狗可以睡觉");
}
}
一个类可以包含以下类型变量:
- 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
- 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问
- 类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。
一个类可以拥有多个方法:
- 在上面的例子中:barking()、running()和sleeping()都是Dog类的方法。
构造方法
- 每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法(即一个无参构造方法)
- 在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法
public class Cat{
public Cat(){ //这是一个没有参数的构造方法
}
public Cat(String name){ // 这个构造方法仅有一个参数:name
}
}
创建对象(类的实例化)
对象是根据类创建的,在Java中,使用new关键字来创建一个对象,分三步:
- 声明:声明一个对象,包括对象名称和对象类型
- 实例化:使用new关键字来创建一个对象
- 初始化:使用new创建对象时,会调用构造方法初始化对象
- 无参构造方法创建对象:
public class Cat {
public Cat() { //无参构造方法
System.out.println("创建一个Cat对象");
}
public static void main(String args[]) {
Cat cat = null; //声明一个对象
cat = new Cat(); //实例化对象,并进行初始化
}
}
运行结果为:
创建一个Cat对象
- 有参构造方法创建对象:
public class Cat {
public Cat(String name) { //无参构造方法
System.out.println("创建一个name为" + name + "的Cat对象");
}
public static void main(String args[]) {
Cat cat = new Cat("Tom"); //声明并实例化一个对象,同时初始化
}
}
运行结果为:
创建一个name为Tom的Cat对象
访问对象变量和方法
通过已创建的对象来访问成员变量和成员方法:
/* 实例化对象 */
Object referenceVariable = new Constructor();
/* 访问类中的变量 */
referenceVariable.variableName;
/* 访问类中的方法 */
referenceVariable.methodName();
访问对象变量和调用成员方法:
public class Puppy{
int puppyAge;
public Puppy(String name){
// 这个构造器仅有一个参数:name
System.out.println("小狗的名字是 : " + name );
}
public void setAge( int age ){
puppyAge = age;
}
public int getAge( ){
System.out.println("小狗的年龄为 : " + puppyAge );
return puppyAge;
}
public static void main(String[] args){
/* 创建对象 */
Puppy myPuppy = new Puppy( "tommy" );
/* 通过方法来设定age */
myPuppy.setAge( 2 );
/* 调用另一个方法获取age */
myPuppy.getAge( );
/*你也可以像下面这样访问成员变量 */
System.out.println("变量值 : " + myPuppy.puppyAge );
}
}
运行结果:
小狗的名字是 : tommy
小狗的年龄为 : 2
变量值 : 2