《[]面向对象编程基础》由会员分享,可在线阅读,更多相关《[]面向对象编程基础(38页珍藏版)》请在金锄头文库上搜索。
1、面向对象编程基础1主要内容l面向对象技术的基本思想和方法l什么是类?什么是对象?他们之间的关系l类、对象的Java实现能力要求l理解面向对象编程的基本思想l掌握类、对象的基本概念,类与对象之间的关 系l能用Java语言编写一个类l能实现对象的生成及对对象的成员方法和成员 变量的调用现实生活中的实例汽车的制造过程 1、发动机的图纸发动机 2、轮胎的图纸轮胎 . n、汽车整体的图纸汽车通过构造不同的汽车图纸,可以制造出不同配置的汽车 抽象具体 类对象 请大家列举出几种类和对象之间的关系面向对象技术的基本概念和特征l对象、类和实体对象类实例化抽象计算机世界实体抽象数据类型现实世界抽象映射计算机逻辑的
2、实现类与对象的概念对象与类对象:现实世界中某个具体的物理实体在计算机逻辑中的映射和体 现,其基本组成:l对象标识l状态(对象的静态属性)l行为(对象的操作) (张三,男,吃饭)类:一种抽象的数据类型,是同种对象的集合与抽象。是Java程序 的基本组成要素,描述了一类对象的状态和行为,其基本成 分包括:l成员变量l成员方法l(人,性别,吃饭的过程)类与对象的Java实现现实世界中的实体:学生抽象数据描述:数据描述:学号、姓名、性别、年龄;行为描述:入学注册、选课。类与对象的Java实现Java中的类 Java中的对象lClass Studentint stuNum; Student stu1=n
3、ew Student()String stuName; Student stu2=new Student();String stuSex;int stuAge;void enrol()System.outprintln(“学生”+stuName+” 已注册入学”);void selectCourse()System.out.println(“学生”+stuName+”已选课”);String getStuInfo()return “”学号:”+stuNum+”t 姓名:”+stuName+”t 性别:”+stuSex+”t 年龄: ”+stuAge;类与对象的Java实现l请大家调试学生类st
4、udent。l运行它,出现什么结果?l问题:当我要知道孙旭川的情况时,是直接看学生的 情况,还是看孙旭川的情况?类对象 Students1 Student s1=new Student();l请大家调试StudentTest,分析两者之间的关系类与对象的另一实例l对象是类的实例Java中定义类的通用格式:class Studentint stuNum;String stuName;String stuSex;int stuAge;void enrol()System.outprintln(“学生”+stuName+” 已注册入学”); void selectCourse() System.ou
5、t.println(“学生”+stuName+”已选课”); String getStuInfo() return “”学号:”+stuNum+”t 姓名:”+stuName+”t 性别:”+stuSex+”t 年龄: ”+stuAge; 类的成员变量与成员方法l成员变量1.命名约定l遵循Java标识符的基本规则l遵循命名惯例2.默认值l未赋值的成员变量将被系统赋予默认值l成员方法基本结构 type methodName(parameter-list)/方法体对象及对象的使用对象对象是一个动态概念,具有产生、使用和消亡的生命周期通过new操作符创建对象对象属性的使用:l对象名.属性;对象方法的
6、使用:l对象名. 方法名();当对象不再使用时,将由系统的垃圾回收机制进行回收。类的创建与对象使用实例实战演习: 习题1 、创建一个学生对象 习题2 、设计课程类,创建一个课程对象面向过程编程与面向对象编程比较l面向过程方法:采用功能划分的方法求解问题方法强调过程的抽象和模块化函数是组成程序的基本单元l面向对象方法:侧重于采用系统结构的划分方法来求解问题方法强调对现实世界的实体和概念的抽象类是组成程序的基本单元面向过程编程与面向对象编程比较l结构化程序设计方法与面向对象程序设计方法地比较 :结构化程序设计侧重于功能抽象,强调确定和分解系统的功 能。其缺点:l功能分解的随意性大l系统功能最不稳定
7、,易变化面向对象程序设计侧重于描述系统结构,功能抽象数据抽 象,其优点:l系统结构相对稳定l灵活的机制,如继承、多态和动态绑定有利于修改和扩充系统 功能面向对象编程基础2主要内容l初步理解封装与抽象的概念l掌握private/public关键字的使用l构造器方法与对象的初始化封装与抽象(1)l问题:(1)如何实现信息的隐藏,保证数据的安全?(2)如何为外界提供一个操作的接口?l类成员的访问控制修饰符public:成员变量与成员方法可被其它任何类访 问private:不能被其它类直接访问,只能被本类 中的方法访问其它访问控制修饰符(以后阐述)封装与抽象实例l实战演习:2.4节封装与抽象(2)l封
8、装与抽象是面向对象方法中的核心概念之一l通过封装实现信息的隐藏(private)l通过抽象为类提供一个公共的、可用的接口;l封装概念示例构造器方法(1)l问题:如何创建具有不同初始值的对象?l讨论:构造器方法的特点:无返回值,无void方法名与类名相同仅在创建对象时调用构造器方法(2)l实战演习:1.创建和尚Monk类的对象2.创建售票机TicketSeller类的对象面向对象编程基础3主要内容lstatic变量与方法l方法的重载与静态多态性静态变量的使用实例l简单买票模拟程序类TickerSall:模拟一次售票主程序:完成多次售票过程l使用static关键字定义静态变量Static变量sta
9、tic变量实例: public class StaticDemo int i=10; /定义成员变量static int j=10; /定义静态变量public StaticDemo()i+; j+; StaticDemo d1=new StaticDemo(); StaticDemo d2=new StaticDemo();StaticDemo int j=10-11-12d1: ji=11d2: ji=11 static关键字定义与类关联的属性、方法等,而不是与变量关联。 实例变量(instance variables),系统为每个对象的实例变量分配一块 内存,不同对象的实例变量各不相同,
10、外部只能通过对象来访问。 类变量的使用:通过类直接调用;通过对象调用static变量使用实例l实战演习:2.4节static方法l类方法(静态方法):使用static修饰的方法如:static double add(double x,double y) return x+y; 使用方法:类方法可以通过类名与对象两种方法访问l讨论1:静态方法中能否访问类的成员变量?l讨论2:main()方法为什么要定义为静态方法?l讨论3:通常在什么情况下使用静态方法?举出你已经用 过什么静态方法?static修饰符(判断对错)l运行程序并改错: Class Avg public static void mai
11、n(String args) double a=5.1;double b=20.32; double c=32.921; System.out.println(doubleAvg(a,b,c); double doubleAvg(double a,double b,double c) return (a+b+c)/3.0; 方法重载(1)l考察使用System.out.println()方法分别输出 字符串、整形数据或浮点型数据的情形 l讨论:系统如何区分调用的是哪个重载方法 ?l方法重载的形式:方法签名的唯一性方法签名的组成:方法名、方法参数个数、方 法参数类型; 方法重载(2)l哪个方法是
12、对方法public void method(). 的重载?A)public void method2( int m). B)public int method().C)public void method().D)public int method( int m, float f). 构造器的重载l通过构造器的重载,一个类可以拥有多个构造器 ,从而可以根据需要以不同的方式初始化对象。 l同一个类中的构造器可以调用同一个类中的另一 个构造器,调用的方法为:this(与被调用构造器的参数列表相对应的实参列表) /构造器的第一条语句面向对象编程基础4主要内容l对象可以作为类的成员变量使用l对象可以作
13、为方法的参数和返回值使用一个类聚合的实例l“类聚合”实例:WheelEngineCarDoorWindowsCar.java(1)class Engine public void start() public void rev() public void stop() class Wheel public void inflate(int psi) Car.java(2)class Window public void rollup() public void rolldown() Class Door public Window window = new Window(); public v
14、oid open() public void close() Car.java(3)public class Car public Engine engine = new Engine(); public Wheel wheels = new Wheel4; public Door left = new Door(), right = new Door(); public Car() for (int i = 0; i 4; i +) wheelsi = new Wheel(); wheelsi.inflate(72); public static void main(String args) Car car = new Car(); car.engine.start();