6. 面向对象编程
阅读面对对象程序设计,回答以下问题:
1. 什么是面向对象编程
2. 什么是对象和类
3. 什么是类的封装
4. 什么是类的继承
5. 什么是类的多态
模拟人类的思维过程,一切皆对象
对象的两个要素:
属性:
用于描述对象静态特性(结构特性)的数据项
比如描述一个人的姓名、性别、年龄、出生日期等属性
方法:
用于描述对象动态特性(行为特性)的操作系列
比如人都具有工作、学习等行为特性
对象可以表示:
对象可以是看的见、摸的着的有形的实体,如计算机、飞机、汽车等等;
对象也可以表示人或组织所起的作用,如治病、教学、生产等;
对象还可以表示事件,如各种事故、演出、战斗、开会等;
对象更可以表示规则,如各种专家规则、约束条件、正则表达式等
把事物归纳、划分成类是我们认知世界常用的方法
分类的依据的原则是抽象,也就是忽略事物的非本质特征,只注意事物的本质特征
找出事物的共性并将具有共同性质的事物划分为同一个类
同一类中的对象有相同的属性(也称为成员变量,它描述该类的静态特性或结构特性)
同一类中的对象有相同的方法(也称服务,它描述该类的行为特性或动态特性)
同一类中的对象遵守相同的语义规则。(共同的约束或规则)
对象将数据和数据的操作打包为一个不可分割的最基本模块,使得只有该类的方法可以操纵和改变这些数据,这就是封装
封装是允许有选择地隐藏类中的属性和方法
继承(重用)现有类生成新类
继承关系:
父类是有其它类继承其行为的类
继承父类的类称为子类
多态是建立在继承基础之上的
不同的子类继承自同一个父类,父类的用一个方法以不同方式实现
类就是对象的模板(template ),是对象的抽象。
而对象就是类的一个实例(instance)
类包含:属性;方法
数据成员是通过方法(函数)访问的
Java使用关键字class定义一个类 定义类时,用属性(成员变量)定义类的静态特征,用方法来定义类的行为特征。
修饰符 class 类名{
变量类型 变量名;
…
变量类型 变量名;
方法修饰符 返回类型 方法名(形参1,形参2,…){
//方法体
}
…
方法修饰符 方法名(参数1,参数2,…){
//方法体
}
}
例如:
public class Dog {
int age;
String name;
String color;
void barking() {
}
void sleeping() {
}
}
语法格式:
修饰符 变量类型 变量名;
修饰符 变量类型 变量名 = 变量值;
private int row = 5;
类中的属性有:
局部变量
在方法、构造方法或者语句块中定义的变量被称为局部变量。
变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
成员变量
成员变量是定义在类中,方法体之外的变量。
这种变量在创建对象的时候实例化。
成员变量可以被类中方法、构造方法和特定类的语句块访问。
类变量
类变量也声明在类中,方法体之外,但必须声明为static类型。
this关键字:
//构造方法有三个参数
public Dog(int age,String name,String color){
//this代指当前对象,这样区分了局部变量和对象变量同名的问题
this.age = age;
this.name = name;
this.color = color;
}
作用:表示对当前对象的引用;
表示类的成员变量,而不是方法中的成员变量,在两者同名时进行区分,最常用的this使用方式;
注意:this不能在static方法中使用
语法格式:
修饰符 方法返回类型 方法名(形参1,形参2,…){
方法体;//语句
}
例如:
public int add(int i,int j) {
return i+j;
}
构造方法
构造方法是类的特殊方法,与类同名且没有返回值
对象的创建通过构造方法实现,构造方法的功能是完成对象的初始化,当类实例化一个对象会自动调用构造方法
类中必定有构造方法,若没有则系统自动添加一个无参无方法体的空构造方法
例如:
public Dog(int a,String n,String c){
age = a;
name = n;
color = c;
}
静态变量
不管创建了类的多少实例,整个类中静态变量的副本只有一个。
引用静态变量的方法:通过类的名称,通过引用类的任一实例
例如:
//静态变量
static int numOfLegs = 4;
静态方法
静态方法只能访问静态成员,实例方法可以访问静态和实例成员
之所以不允许静态方法访问实例成员变量,是因为实例成员变量是属于某个对象的,而静态方法在执行时,并不一定存在对象
类方法没有this
例如:
//定义静态方法,获取腿的数量
public static int getLegs(){
return numOfLegs;
}
对象是类的实例化
Java中使用new关键字来创建对象
创建对象有两步:
声明:声明一个对象,包括对象名称和对象类型
实例化:使用关键字new来创建一个类的对象。
格式:
类名 对象名 = new 类名();
例如:
public class Dog {
int age;
String name;
String color;
//构造方法有三个参数
public Dog(int a,String n,String c){
age = a;
name = n;
color = c;
}
public static void main(String[] args) {
//生成Dog类的一个对象,并按照构造方法参数表传入参数值
Dog wangcaiDog = new Dog(1,"Wangcai","brown");
}
}
创建一块内存空间并将内存空间分配给创建的对象
将对象的属性成员变量全部初始化,并执行构造方法
类成员变量初始值:
Java保证了在任何代码使用该对象之前,已将对象中的状态信息初始化为缺省值
格式:
对象.成员变量
对象.方法名()
例如:
//访问对象的变量
int age = wangcaiDog.age;
//调用对象的方法
wangcaiDog.barking();
格式:
类.成员变量
类.方法名()
例如:
//调用Dog类的属性
int numOfLegs = Dog.numOfLegs;
//调用Dog类的静态方法而不需要生成一个对象来调用
wangcaiDog.getLegs();
Java中一般把属性数据和一些私有的方法声明为private或者protected类型,从而使这些数据或者方法不能被外部修改或调用。
只有我们希望被外部直接访问的属性数据和方法才声明为public。
如果在声明数据和方法时不写是private、protected还是public,那么类型为默认。
两个对象相比较,一定要注意是比较值还是比较地址
//生成Dog类的一个对象,并按照构造方法参数表传入参数值
Dog wangcaiDog = new Dog(1,"Wangcai","brown");
Dog xiaoheiDog = new Dog(1,"Wangcai","brown");
System.out.println("两个对象的比较结果为:"+(wangcaiDog==xiaoheiDog));
对象在创建的时候,系统会分配内存空间给新建的对象,当对象被销毁,内存空间会归还给系统,该对象就不可以再继续使用了。
//生成Dog类的一个对象,并按照构造方法参数表传入参数值
Dog wangcaiDog = new Dog(1,"Wangcai","brown");
Dog xiaoheiDog = new Dog(1,"Wangcai","brown");
System.out.println("两个对象的比较结果为:"+(wangcaiDog==xiaoheiDog));
//销毁对象,将对象置为空
wangcaiDog = null;
原文:http://www.cnblogs.com/jeknight/p/6892598.html