Java—面向对象(1)
1.面向过程和面向对象
1.什么是面向过程和面向对象
程序设计方法一般分为两大类:面向过程的设计方法和面向对象的设计方法。
面向过程:面向过程程序设计方法就是先分析出解决问题所需要的步骤,然后按照步骤依次去执行。
**面向对象:**面向对象程序设计方法是把构成问题的事务分解成各个对象,对象来描述在解决整个问题中的步骤的一些行为和属性。
例如:学生课表为:数学,语文,英语 现在要解决给学生上课的问题:
面向过程设计:**1.上课铃 2.数学老师讲数学课 3.下课铃 4.上课铃 5.语文老师讲语文课 6.下课铃 7.上课铃 8.英语老师讲英语课 9.下课铃 **
面向对象设计: 在面向过程的基础上我们可以将整个过程分为:1.教师(每个老师为一个对象,每个对象都有讲课这个讲课这个行为)2.课程控制(上下课铃控制课程的开始和结束)。
2.面向过程和面向对象的差异
通过这个例子可以看到面向过程就是自上而下的按照步骤编程,面向对象是实物高度抽象化,将复杂的问题简单化,更注重的是功能而不是过程步骤,面向过程中更多的体现的是执行者,面向对象中更多的体现是指挥者。
2.面向对象的特点
对象:对象就是现实世界存在的任何事务都可以称之为对象,有着自己独特的个性,对象一般都由属性+方法组成。
属性:用来描述具体某个对象的特征。比如张三身高180M,体重70KG,身高、体重都是属性。
方法:用来描述具体某个对象的行为和功能。比如张三讲话、能开车就是其行为和功能。
类:具有同种属性的对象称为类,是个抽象的概念。比如“人”就是一类,期中有一些人名,比如张三、李四、老王等等这些都是对象,类就相当于一个模具,他定义了它所包含的全体对象的公共特征和功能,对象就是类的一个实例化,小明就是人类的一个实例化。
面向对象具有三大特性:封装、继承、多态
3.面向对象的简单实现
1.类和对象的创建
对象是类的实例化,在创建一个对象前就必须先有一个所属的类。Java中类使用关键字class。
普通类的定义模式:访问控制符 修饰符 class 类名 {
访问控制符 修饰符 成员变量;
…
访问控制符 修饰符 成员方法(){};
…
}
1.访问控制符和修饰符
类的访问控制符:public 和默认(什么都不写)
控制符 | 说明 |
---|---|
public | 所有类都可以访问,一个Java文件中只能有一个public类且类名要和文件名保持一致 |
默认 | 只有在同一个包里的类才能访问 |
类的修饰符:
修饰符 | 说明 |
---|---|
final | 该类不能被继承,只有该类本身的实例对象才能访问类中的内容 |
abstract | 抽象类,类中可以有非抽象方法,子类必须实例化该类的抽象方法,只能通过子类访问该类的内容 |
成员变量的访问控制符:
控制符 | 说明 |
---|---|
public | 所有类都可以访问 |
protected | 同包的类及其子类可以访问,不同包的子类也可以访问 |
默认 | 同包的类可以访问 |
private | 只有当前的类可以访问 |
成员变量的修饰符:
修饰符 | 说明 |
---|---|
final | 该变量在第一次赋值之后不能再次修改,值保持不变 |
static | 该变量属于该类所用实例,所有实例共用一个该变量 |
方法的访问控制符:
控制符 | 说明 |
---|---|
public | 所有类都可以访问 |
protected | 同包的类及其子类可以访问,不同包的子类也可以访问 |
默认 | 同包的类可以访问 |
private | 只有当前类的对象可以访问 |
方法的修饰符:
修饰符 | 说明 |
---|---|
final | 该方法不能被覆盖 |
static | 该方法属于类,可以直接通过类名调用 |
abstract | 抽象方法,在该类必须空实现,被非抽象子类实现,不能与 final和static同时使用 |
2.类和对象的实例
例:创建一个Person类
public class Person {
public String name;//姓名
private String sex;//性别
private int age;//年龄
//打招呼的行为方法
public void sayHello(){
System.out.println(name+":Hello");
}
}
实例化类创建对象:通过关键字new创建对象
对象的创建模式:类 对象名 =new 类的构造方法
创建对象名字为 张三 电泳打招呼方法:
public class text{
public static void main(String[] args) {
Person p=new Person();
p.name="张三";
p.sayHello();
}
}
运行结果:
3.创建对象时内存分配
上述代码通过Person p=new Person();
代码创建了一个对象,通过p.name="张三";
代码为属性name赋值。
在执行Person p=new Person();
时,jvm会在堆中开辟一段空间供对象使用,并同时给对象的属性初始化;将开辟的空间的起始地址传给变量p;执行p.name="张三"
时,将name的值修改修改为“张三”。
4.面向过程和面向对象的优缺点
面向过程:
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源。
缺点:代码执行时相互影响,耦合度较高,没有面向对象易维护、易复用、易扩展
面向对象:
优点:复杂问题简单化,代码易维护、易复用、易扩展,由于有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
缺点:性能比面向过程低