《第3章 面向对象》由会员分享,可在线阅读,更多相关《第3章 面向对象(20页珍藏版)》请在金锄头文库上搜索。
1、第 3 章 面向对象1. 首先为什么选择面向对象语言开发程序。面向对象编程可以现实生活中真实存在的事物直接映射到程序中。2. 面向过程的缺点:现实生活中业务需求抽象成算法,直接映射成函数,一旦算法改变,函数便需要重新写,对系统的其他模块影响很多。当系统模块逐渐复杂,算法与算法之间复杂性大大增强,函数复杂性较高,不适大型项目的开发。3. 程序=算法 +数据结构;面向过程主要研究算法;而面向对象主要研究数据结构。4. 类和对象类:简单的说,类就是类型。一组具有相同特征和功能的事物,我们说,他们是一类的。普遍的抽象的事物。对象:利用一抽象好的类型,创造一个符合这个类型的事物。怎么区分类和对象:哲学上
2、讲,人们认识事物的过程可以:从特殊一般特殊。比如:想创建一个显示器的类,可以先找一个具体的现实,研究他有什么特征和功能。然后抽出一个具有这些特征和功能的模型,这就是一个显示器的类。利用个类抽象好的类,创造一个具有这个类的特称和功能的事物,这个事物就是对象。5. 现实世界与计算机世界引申同一个事物,在不同环境下,不同人对其有不同的理解。在程序中,由于研究领域的不同,需求不同,对同一事物,可能有不同的理解和映射。在自己的项目中,我们只关心与我们项目有关的事物的特征与功能。例:在学生管理系统中,创建学生类没必要设置血型的属性。6. 创建对象的语法:利用 new 关键字数据类型 对象 = new 数据
3、类型();例:String str = new String(“ssss”);new 关键字就是调用构造器用的。利用构造器创建对象并初始化,如果一个变量没有创建对象并初始化,那么这个变量不能使用。Student str = new Student();Student str 为声明一个 Student 的变量,在内存中的栈空间分配资源。new Student()为调用构造方法,创建一个对象,在堆中分配资源;str = new Student(); 利用“=” ,把栈中的变量连接到堆中的对象上。Java 中的对象是在堆中创建。怎么判断是否创建对象,一般看有几个 new 构造器,一个 new 构造
4、器,就在堆中开辟一个对象。用类创建对象也叫对象的实例化。声明变量是在栈中定义的。所有基本数据类型全部在栈中定义。题:ClassDemo objectName = new ClassDemo(); ClassDemo objectName2 = new ClassDemo();创建了两个对象,因为两个 new 调用了两次构造方法。7. 类中都能写什么(不包括内部类的情况)属性:对应显示生活中事物的特征。方法:对应显示生活中事物的功能。构造器(构造方法,构造函数)块(静态块,动态块)8. 属性:对应显示生活中事物的特征。只能在类中定义(也可以是接口之类)语法:修饰符 数据类型 属性名;例:priv
5、ate String name;JVM 默认给他们初始化。所有属性都有默认值:int 为 0,复合数据类型默认为 null9. 方法:对应显示生活中事物的功能。只能在类中定义(也可以是接口之类)语法:修饰符 方法的返回值类型 方法名(参数列表)例:public void setName(String name)public void method(参数类型 1 变量 1,参数类型 2 变量 2)10. 构造器的作用与特点作用:就是创建对象并初始化。特点:与类名相同,无任何返回类型,这里无返回类型,并不是返回空类型,即 void。如果没有为类定义一个显示的构造方法,那么,系统会为程序提供一个“共
6、有的,无参的构造函数” ,如果用户自定义了构造器,那么体统不会为用户再创建一个无参共有的构造器。用户创建对象时,利用 new 关键字调用构造函数,如果这个类都没有这个构造函数,那么就不能调用了。例:类 Student 的构造方法:为 public Student(参数列表)11. 块块分:静态块:只在第一次类加载时,执行一次。动态块:每创建一个对象,即每调用一次构造,均执行一次。类中各个部分的执行顺序:静态块静态方法块构造方法实例方法public class Demo4 staticSystem.out.println(静态块 );System.out.println(动态块 );public
7、 static void staticShow()System.out.println(静态方法 );public void show()System.out.println(普通方法 );public Demo4()System.out.println(构造方法 );public static void main(String args) Demo4.staticShow();new Demo4().show();打印:静态块静态方法动态块构造方法普通方法12. null 为空对象,表示没有创建对象例:String str1 = “”;创建对象了,可以使用 str1String str2 =
8、 null;没有创建对象,不可以使用 str2null 与“”的区别:null 没有开辟内存空间, “”开辟内存空间,但是,没有存储东西。因为,只有开辟空间的才能使用,所以, “”可以使用,null 不可以。13. Java 源文件中都能写什么注释除外,Java 源文件中不同内容存在顺序之分package mypage; /包语句import 包; /倒包语句class 或 interface 等的定义。 一个 Java 源文件可以写多个类,但不推荐使用。14. 包:package 关键字包的作用:管理并组织代码。由于不同开发的程序有可能有相同的类或接口,为了使他们同时存在,这时要使用包。由于
9、一个工程,不同代码完成不同的功能,因此,可以利用包,来区分不同的代码模块,例:dao 包中放操作数据库的类, service 包放工程的业务逻辑类等等。注意:包名的定义采取小写字母,不要用中文。包名也不能重复,为了避免包名的重复,企业中采取域名倒转的形式定义包语法:package 域名.公司名.项目名.模块名.;例:package com.px1987.studentsystem.dao;package com.lfy.shoppingsystem.service;15. 面向对象的特点抽象,封装,继承,多态抽象:我们从现实世界,从事物中提取对我们项目有用的东西,提取成概念。封装:把抽象成的概
10、念在计算机中写成类,接口等。例如:类封装了这个事物的特称和功能。封装的作用,用于创建类和隐藏类中的信息。组合:就在来类中使用了另一个类或接口,也可扩展其他类的。public class Demo5 private String str;private Apple apple;public void show(Apple apple)this.apple = apple;16. 访问控制权限: 用于封装和隐藏信息的,除内部类外,访问控制权限只能修饰属性,方法,构造器,不能修饰方法内的变量。分为 4 中:public ,protected ,默认,privatepublic:访问权限最高,在此工程
11、下均可以访问。protected:只能在本包中的类,或其他包中的子类可以访问。默认(也就是什么也不写):在本包中使用。private:访问权限最低,只能在本类中使用。注意:以后除非程序特殊设计,否则,属性全部私有(private) ,并为这些属性设置 setter 和 getter 方法,由于访问和修改这些属性。17. 继承:现实生活中,存在着一种继承的关系,继承者会得到被继承的一些特称和功能。Java 中继承利用 extends 关键字继承的好处就是:可以获得父类的某些属性和方法。继承的坏处就是:破坏类的封装性。注意:Java 中只支持单继承 ,继承的类只能继承父类的共有方法和 protec
12、ted 方法。包括共有属性和 protected 属性。例:public class Fatherpublic class Son extends Father18. 多态(在现实生活同一种事物,在不同的条件,呈现出不同的状态) 。例:同样是洗的功能,洗衣服与洗车是不一样。多态在代码中体现 2 种形式:重写,重载重写:在有继承关系的两个类中,父类具有一个方法 A();子类继承方法 A(),但是,之类不想拥有和父类一致的方法 A(),这样在子类中可以重新定义 A()。public class Graph public void drawMe() throws NullPointerExcepti
13、onSystem.out.println(画一个图形 );public class Triangle extends Graphpublic void drawMe()System.out.println(画一个三角形!);重写特点:1. 必须与父类要重写方法的名字一致。2. 子类重写父类的方法,这个方法的访问权限不能小于父类方法。3. 子类重写父类的方法,抛出的异常不能大于父类抛出的异常。重载:在同一个类中,方法名相同,参数列表不同(包括类型不同,数量不同,顺序不同) 。例:public class Washer public void wash()System.out.println(默认
14、洗15分钟 );public void wash(int time)System.out.println(洗 + time + 分钟 );实参与形参:形参:当你定义一个方法时,这里方法参数类表,均为形参。实参:当你调用这个方法时,为这些方法传入参数时,这些参数叫实参。例:public void show(int num) /这里的 int num 为形参show(100); /这里的 100 为实参隐式重载:public class Father public void driver()System.out.println(开车 );public class Son extends Fathe
15、r public void driver(String ticket)System.out.println(开得是 + ticket + 票的车!);多态也叫做“动态绑定” 。绑定:绑定是指确定属性和方式归哪个类所有,类型是什么。例如:在 Test 类中有属性 name,有方法 getName(),那么当你创建一个 Test的对像 testObject,那么当调用相应的 name 属性或 getName()方法,这个过程就是一个绑定过程,他把 Test 中的相互属性和方法绑到了你创建的这个对象上。绑定分为:前期绑定(编译时绑定)和后期绑定(运行时绑定或动态绑定) 。判断父类声明子类实例化的秘籍
16、:Java 中所有的属性,静态方法全部为前期绑定。你声明什么类型的对象,那么你调用的属性,就是你声明的类所属的属性。调用静态方法,也看是谁声明的,就是谁的静态方法。Java 中所有的实例方法(非静态方法)为后期绑定,即动态绑定。调用方法时,真正调用的是 new 类型() 的方法,真正实例化的对象的方法。软件工程中推荐使用的一种创建对象的形式:父类声明子类实例化。语法:父类 对象 = new 子类();例: Father obj = new Son();一定要看以下程序。public class Father public int age = 30;public void showMe()System.out.println(我是爸爸! );public static void showSex()Sy