Download presentation
Presentation is loading. Please wait.
1
面向对象的程序设计(一)
2
知识点 面向对象的编程概念 封装、继承、多态 Java中面向对象技术的实现手段
3
面向对象的思想概述 目的是使描述问题的问题空间和解决问题的方法空间在结构上尽可能地一致。实现代码的可重用,简化程序设计。
pascal的设计者(沃思) 算法+数据结构=程序。 面向对象方法的核心概念。类和对象。类作为对象的蓝图,对象是类的具体实现。 面向对象技术的特征: 封装、继承和多态。 面向对象的技术: 1、面向对象的分析(OOA) 2、面向对象的设计(OOD) 3、面向对象的实现(OOP)
4
面向对象的软件开发过程 面向对象的分析(OOA):明确用户的需求,用标准化的面向对象的模型规范(如:UML)表述这一需求,形成面向对象的分析模型,为现实世界建模。 面向对象的设计(OOD):包括问题逻辑(OOA)、界面管理和数据管理。即:将OOA模型细化,设计类,包括类的属性和类之间的相互关系。 面向对象的实现:选定一种面向对象的编程语言,编码实现上述的设计,并在开发过程中引入测试,完善整个解决方案。Rose工具可以自动生成程序。
5
类、对象和实体 类是所有具有一定共性的一批对象的抽象。 对象是类的一个实例 实体是现实世界中存在的具体事物 对象 映射 实体 实例化 抽象
抽象出共有的东西 计算机世界 现实世界
6
类和对象的举例 class Person { String name; int age; void sayHello( ){
//定义一个类 class Person { String name; int age; void sayHello( ){ System.out.println(“Hello! My name is ”+name); } //声明并创建一个属于类Person的对象,将该对象命名为a Person p = new Person(); //调用对象p中的方法 p.sayHello();
7
类的组成 类体是由成员变量和成员方法组成的。 成员变量是静态特征的描述,可以是java中的任意的数据类型。
成员方法是动态特征的反映,包括方法头和方法体。 类、成员变量和成员方法都有访问权限的限制。
8
类的声明 [public][abstract|final] class 类名 [extends 父类名][implements 接口名]
例如: public class Vechile{ private double maxLoad; public void setMaxLoad(double value) {maxLoad=value; }
9
声明属性 [public|protected|private][static][final] type variableName;
例如:public class Foo{ private int x; private String name=“Hello”; } Volatile:使多个并发的线程对该变量的访问能保持一致。
10
声明方法 [public|protected|private][static][final
|abstract][native][synchronized] returnType methodName([paramList]) [throws exceptionList] 例如: public class Dog{ private int weight; public void setWeight(int newweight) {} public int getWeight() {} }
11
构造方法 构造方法(构造函数):是一个特殊的方法,构造方法具有和类名相同的名称,专门用来创建对象,完成初始化工作。 特殊性体现: 1、方法名和类名相同。 2、没有返回类型,也不能写void 3、主要完成对类对象的初始化工作。 4、一般不能显式的调用,而是用new来调用。 5、在创建一个类的新对象的同时,系统会自动调用该类的构造方法为新对象初始化。
12
声明构造方法 [public|private|protected]className ([paramList]) {方法体}
例如:public class Dog{ private int weight; Dog(){ weight=12; }
13
默认构造方法 每一个类至少有一个构造方法。
如果用户没有为类定义构造方法,系统将为这个类提供一个默认构造方法,该方法无形参,方法体为空。形如: className (){} 如果class前有public修饰符,则默认构造方法前面会是public的. 这样,即使一个类没有显式地给出构造方法,也可使用默认构造方法为其创建实例。
14
默认构造方法 用默认构造方法初始化对象时,由系统用默认值初始化对象成员变量。各种数据类型的默认值为: 数值型 0 boolean false
数值型 boolean false char ‘\0’ 对象 null
15
构造方法举例: public class MyDate{ private int year; private int month;
private int day; MyDate() { }//也为public MyDate(int i,int j,int k){ year=i; month=j; day=k; }}
16
Main 方法 Main方法表示一个java程序的执行起点,main方法必须放入一个类中定义,java中可以包含一个或多个类,但在application环境下有一个类(只能由一个类)必须定义一个main方法。 Main是程序中唯一与用户直接交换信息的方法,它没有返回值,由一个字符串数组参数,方法体由用户编写。
17
Main 方法 定义格式: Public static void main(String args[]) {方法体}
main方法属于类不属于类实例,所以系统调用main方法时不用创建它所属类的实例。 Java程序可以带一个或多个命令行参数,这些参数作为字符串依次存放在args数组的各元素中。 举例:MainTest
18
方法的重载 概念:多个方法拥有相同的方法名,是线多态的手段之一。 特点:重载的方法之间参数列表必须不同。 构造方法可以重载 例
Person.java
19
对象的创建和使用 对象的创建 首先利用已有的类声明对象名,通过该类构造方法实例化对象 Person p = new Person();
对象的使用 通过对象访问其属性和方法 p.sayHello(); p name age 开辟空间
20
继承 引入继承继承性的目的 提高程序抽象程度,实现代码重用 通过已定义一个类,派生出新的不同个性的子类,二者之间是一般与特殊的关系。
21
继承性(1) 继承和子类的概念 继承而得到的类为子类,被继承的类为父类。子类继承父类的状态和行为,同时也可以修改父类的状态和行为,并添加新的状态和行为。 继承关系也称“即是”(is a)关系。因为当类Y继承类X时,由继承性可知Y具备了X的全部性质,所以Y即是X。显然Y也包含了X中没有的属性和方法,具有比X更多的性质。
22
继承性(2) Java中一个类可以有多个子类,也可以没有,其数量上没有限制。
Java中不支持多重继承,一个类只能有一个父 类,缺省父类为Object类。所有类都是通过直接或间接地继承Java.lang.Object得到的。 Java中一个类可以有多个子类,也可以没有,其数量上没有限制。
23
子 类 (1) The Employee class: public class Employee {
子 类 (1) The Employee class: public class Employee { public String name = ""; public double salary; public Date birthDate; public String getDetails() {...} }
24
子 类 (2) The Manager class: public class Manager {
子 类 (2) The Manager class: public class Manager { public String name = ""; public double salary; public Date birthDate; public String department; public String getDetails() {...} }
25
子 类 (3) public class Employee { public String name = "";
子 类 (3) public class Employee { public String name = ""; public double salary; public Date birthDate; public String getDetails() {...} } public class Manager extends Employee{ public String department; }
26
子 类 (4) class < name> [extends < superclass>] {
子 类 (4) Java子类定义语法: class < name> [extends < superclass>] { < declarations>* } 例:ABTest
27
成员变量的隐藏和方法重写 在类层次结构中,当子类的成员变量与父类的成员变量同名时,子类的成员变量会隐藏父类的成员变量,当子类的方法与父类的方法具有相同的名字、参数列表、返回值类型时,子类的方法叫作重写了父类的方法,当重写的方法在子类对象被调用时,它总是参考在子类中定义的版本,在父类定义的方法就被隐藏。例:ABTest1
28
方法重写总结 必须遵循两个原则,否则编译器指出程序出错 1、重写的方法不能比被重写的方法有更严格的访问权限。
2、重写的方法不能比被重写的方法有更多的异常。
29
关键字this(1) This表示所调用方法或所访问的变量对象本身 void sayHello() {
System.out.print(“hello! my name is”+name) } System.out.print(“hello! my name is”+this.name)
30
关键字this(2) This表示所调用方法或所访问的变量对象本身 person(int age ,String name) {
this.age=age; this.name=name; } this.age表示类成员变量,而age表示方法中的参数变量。
31
关键字this(3) 用this调用另一构造方法 person() { this(0,” ”) }
32
super 子类在隐藏了父类的成员变量或重写了父类的成员方法后,有时还要用到父类的成员变量,或在重写的方法中使用父类中被重写的方法以简化代码的编写,这时就要访问父类的成员变量或调用成员方法,java中通过super来实现对父类成员的访问。 Java中,this用来引用当前对象,与其类似,super用来引用当前对象的父类。
33
Super的使用 1、用来访问父类被隐藏的成员变量 Super.variable 2、用来调用父类中被重写的方法。
Super.Method([参数列表]) 3、用来调用父类的构造方法。 Super([参数列表])
34
关键字super (2) public class Employee { private String name;
private double salary; private Date birthDate; public String getDetails() { return "Name: " + name + "\nSalary: " + salary; } public class Manager extends Employee { private String department; // call parent method return super.getDetails() + "\nDepartment: " + department;
Similar presentations