收藏 分享(赏)

java面向对象简介.ppt

上传人:hwpkd79526 文档编号:8386645 上传时间:2019-06-23 格式:PPT 页数:126 大小:1.30MB
下载 相关 举报
java面向对象简介.ppt_第1页
第1页 / 共126页
java面向对象简介.ppt_第2页
第2页 / 共126页
java面向对象简介.ppt_第3页
第3页 / 共126页
java面向对象简介.ppt_第4页
第4页 / 共126页
java面向对象简介.ppt_第5页
第5页 / 共126页
点击查看更多>>
资源描述

1、Java语言与面向对象程序设计,Java &Object Oriented Programming,第三章,类和对象,3,目标,类的设计 对象创建及对象使用 构造方法意义及使用,4,抽象,抽象是从特定的实例中抽取共同的性质以形成一般化概念的过程。张三,李四-人类; 人类-王五,5,抽象思想在软件设计的应用:,问题领域,各种类,程序,对象,对象,对象,对象,6,抽象思想在软件设计的应用:,超市销售问题,员工类 商品类 供货商,程序(运行),对象,对象,对象,对象,静态程序,7,类与对象,类(class)是既包括数据又包括作用于数据的一组操作的封装体。 对象(object)是类的实例(instan

2、ce)。,8,9,封装,封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义:,10,类实现了封装,对象的属性.,对象提供的服务,这就样实现了封装,1、把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象)。,11,类实现了封装,对象的属性:反映对象的状态。.,对象的行为:可以改变对象状态(又称服务),这就样实现了封装,2、信息隐蔽。即尽可能隐蔽对象的内部细节,对外形成一个边界或者说形成一道屏障,只保留有限的对外接口使之与外部发生联系。,12,类设计的两大要素:,成员变量 成员函数或者成员方法,13,创建类,class name t

3、ype variable1;type variableN;type methodname1(parameter-list)/方法体type methodnameN(parameter-list)/方法体 ,Java中定义类的通用格式:,成员变量(数据),成员方法 (对数据的操作),14,Class Televsion private float volume = 100.00f; private float brightness = 57.00f; public float adjustVolume( ) .; public float adjustBright( ) ; ,15,成员变量设计

4、:,确定变量的数据类型: 运动员类的心率?int float; 银行帐号的利率?int float; 确定变量的访问存取类型: 原则尽量用private,体现数据隐藏特性; 变量名尽量体现实际意义,增强可读性。 width,height等。 Kuandu, gaodu或aa,bb等不建议,16,17,成员方法(成员函数),public void setExchangeRate ( double rate ) exchangeRate = rate; ,18,定义类,声明类 修饰符 class 类 extends 父类 implements 接口列表 声明成员变量 public class Da

5、te1 /类声明 int year, month, day; /声明成员变量 ,19,定义类,声明成员方法 修饰符 返回值类型 方法(参数列表) 语句序列;return 返回值; 声明main方法 public static void main(String args) 【例】 声明日期类。,20,对象,可以把类看作一个模板,按照类模板所定义的一个个具体的对象称作类的实例,或称作对象。,苹果类,21,对象引用,对象引用: 对象引用可以理解为对象的名字,指向具体对象。 例如: Date1 deadline= new Date1();,deadline,内存,22,创建对象,使用下列语法可创建对象

6、:new 构造函数 关键字 new 通常称为创建运算符,用于分配对象内存,并将该内存初始化为缺省值。 一旦 new 完成分配和初始化内存,它就将调用构造函数来执行对象初始化。,当创建一个类时,只是创建了一种新的数据类型(模版)。对象是类的具体存在实例,class Test public static void main(String args)Date1 f = new Date1(); ,创建对象,23,创建对象,对象实例化 类 对象 = new 类的构造方法(参数列表) Date1 aday=new Date1();,24,使用对象,引用对象的成员变量和调用对象方法 对象.成员变量 对象.

7、成员方法(参数列表) aday.year = 2007; /引用对象的成员变量 aday.setDate(2006,1,28); /调用对象的方法,25,使用对象,对象的引用模型,26,生产对象实例的行为,生产对象的-构造方法 编程中很多问题来源于对变量不适当的初始化,由此发明了用构造函数产生新对象。,27,Java 的构造方法,public ,public Date2(int y, int m, int d) 修饰的,没有返回值, ,28,构造方法,构造方法 声明构造方法 真正的初始化再构造函数里 public class Date2 public Date2(int y, int m, i

8、nt d) /声明构造方法 /构造方法与类同名,构造方法返回该类的一个实例year = y;month = m;day = d; publicDate2() 构成方法重载 Date2 aday = new Date2(2006,1,28); 调用,29,构造方法的种种规矩,构造方法特点: (1) 构造方法的方法名与类名相同。 (2) 构造方法没有返回类型。New (3) 构造方法的主要作用是完成对类对象的初始化工作。 (4) 构造方法一般不由编程人员显式直接调用。 (5) 在创建一个类的新对象的同时,系统会自动调用该类的构造方法为新对象初始化。,30,方法重载(overloading),方法重

9、载是Java实现面向对象的多态性机制的一种方式。 同一个类中多个方法有相同的名字,不同的参数列表,这种情况称为方法重载。 返回类型不同并不足以构成方法重载。 当重载方法被调用时,编译器根据参数的类型和数量来确定实际调用哪个重载方法的版本。,参数个数,参数类型,31,方法重载示例,class Calculation public void add( int a, int b) int c = a + b;System.out.println(“两个整数相加得 “+ c);public void add( float a, float b)float c = a + b;System.out.pr

10、intln(“两个浮点数相加得“+c);public void add( String a, String b) String c = a + b;System.out.println(“两个字符串相加得 “+ c); ,class CalculationDemo public static void main(String args) Calculation c = new Calculation();c.add(10,20);c.add(40.0F, 35.65F);c.add(“早上“, “好“); 方法的重载,编译器决定调用版本,32,方法的重载,成员方法重载 构造方法(类名相同)重载

11、 重载构造函数提供了一组创建对象的方式,可以根据需要决定是否带初始参数和带几个初始参数,33,构造方法重载,Date2 aday1 = new Date2();Date2 aday2 = new Date2(2006,2,28);Date2 aday3 = new Date2(aday2); 【例】,34,使用拷贝构造方法复制对象,Date2 aday3 = new Date2(aday2); /由已知对象创建新对象,35,关于构造方法声明和使用的几点说明1 Java 为每一个类自动提供缺省构造函数系统给加一个无参无内容的构造函数(前提自己一个也不写)2 一旦创建了自己的构造函数,缺省的构造函

12、数将不复存在。 【例】构造方法与成员方法的不同之处?,36,this引用 访问本类的成员变量和成员方法 this.成员变量 (this.可以忽略没有影响)除了成员变量和后面的参数名相同的时候,系统不能识别,结果出错了 this.成员方法(参数列表) 调用本类重载的构造方法 this(参数列表) 指代对象本身 this,37,一讲Java的包-Package,包是组织类的一种单位。好象小学老师给分的值日小组。,包名,38,访问控制符,访问控制符: 类访问控制符(public, 默认friendly; 成员变量和方法访问控制符(public, private, protected,默认),39,类

13、访问控制符- public,公共访问控制符publicJava中类的访问控制符:public,即公共的。一个类被声明为公共类,表明它可以被所有的其他类所访问和引用,这里的访问和引用是指程序的其他部分可以创建这个类的对象、 从而访问这个类内部可见的成员变量和调用它的可见的方法。,40,类访问控制符-Public,package1,package2,41,类访问控制符默认型空白,package1,package2,42,public Class Televsion private float volume = 100.00f; private float brightness = 57.00f;

14、public float adjustVolume( ) .; public float adjustBright( ) ; ,class Televsion private float volume = 100.00f; private float brightness = 57.00f; public float adjustVolume( ) .; public float adjustBright( ) ; ,43,类的访问控制,顶层类只能是public或默认访问级别 public级别的类可以被同一个包或者其他包中的类访问 默认级别的类只能被同一个包中的类访问,public class

15、 Sample /public级别 class Sample /默认访问级别 protected class Sample /非法 private class Sample /非法,44,成员变量和方法访问控制符,面向对象的世界里: 程序是由各种类组成。类中方法和属性(成员变量)访问有一定的规则。,45,谁也别碰我的-private,public class Televsion private float volume = 100.00f; private float brightness = 57.00f; public float adjustVolume( ) .; public flo

16、at adjustBright( ) ; ,46,谁也别碰我的-private,package1,package2,47,public void setAge(int age) 数据 成员变量设置成私有 Set Getif (age0 ,48,缺省的默认修饰符空白,public class Televsion float volume = 100.00f;float brightness = 57.00f;float adjustVolume( ) .; public float adjustBright( ) ; ,又名包权限或者友善的(friendly)修饰符,49,缺省的默认修饰符空白,

17、package1,package2,50,照顾后代的protected (继承)其他包中的子类,package1,package2,51,成员变量或成员方法的访问控制,修饰符 同类 同包 不同包子类 不同包非子类public 是 是 是 是 protected 是 是 是 默认friendly 是 是private 是,52,成员变量或成员方法的访问控制,包1,包2,public int v1; protected int v2; int v3 private int v4;,ClassA,ClassB,ClassC,ClassD extends ClassA,ClassB, ClassC,C

18、lassD分别可以访问ClassA的哪些成员变量?,53,访问控制符总结,成员变量尽量设计成private,保证数据隐藏特性; 需要其他包中对象调用的方法设计成public; 当情况不明确时,可以先采用默认类型。也就是什么也不加。,54,继承,父 类,子类,55,什么是继承,继承的一般含义是指接收来自父母的财产。换句话来说,继承是子女拥有父母所拥有的财产。 面向对象的程序设计中的继承和上述含义类似,只不过这里继承的实体不是财产,而是类,即子类拥有父类的成员变量和方法。由一个已有的类定义一个新类,称为新类继承已有的类,56,继承,57,继承的优点,58,继承原则,子类继承父类的所有成员变量 子类

19、继承父类除构造方法以外的成员方法, 子类不能继承父类的构造方法。因为父类构造方法创建的是父类对象,子类必须声明自己的构造方法,创建子类自己的对象。 子类不能删除父类成员。 子类可以增加自己的成员变量和成员方法。 子类可以重定义父类成员。,59,extends关键字,extends关键字用于继承类。 声明一个继承父类的类的通常形式如下: class subclass-name extends superclass-name /类体 子类 父类 没有extends,默认父类为Object Java类只能有一个父类,即单继承,注意,60,Object 类,Object类是类体系结构的根 Java 系

20、统中的每个类都是 Object 类直接或间接的子类 Object 类包括在 java.lang 包中 此类定义了所有对象都具备的基本状态和行为,61,类的继承性,62,class Person String name; int age; public Person(String name,int age) this.name=name;this.age=age; String getName( ) return name; void setName(String name) this.name=name; ,63,class Student extends Person /Student是Pe

21、rson类的子类 private String speciality; public Student(String name, int age, String spec)super(name,age); /(super)调用父类的构造方法this.speciality = spec; public String getSpeciality() return speciality; public static void main(String args)Student li= new Student(“li“,12,“computer“); li.setName(“lisanfeng“);Sys

22、tem.out.println(li.getName()+li.age+li.getSpeciality(); ,64,定义继承的类,类的赋值相容性 子类对象即是父类对象。 子类对象对父类成员的访问权限 子类对父类的私有成员(private)没有访问权限; 子类对父类的公有成员(public)和保护成员(protected)具有访问权限。 子类对父类中缺省权限成员的访问分两种情况,对同一包中父类的缺省权限成员具有访问权限,而对不同包中父类的缺省权限成员则没有访问权限。,65,子类的重定义,子类重定义从父类继承来的成员 如果子类声明一个与父类成员变量同名的成员变量,此时称子类的成员变量重写(覆盖

23、)了父类中的同名成员变量 如果子类方法与父类方法同名,且参数列表相同此时称子类方法重写(覆盖)了父类中的同名方法 如果子类方法与父类方法同名,且参数列表不相同此时子类继承了父类的成员方法,且形成方法的重载。,66,成员方法的重写(Override),有的地方也叫:覆盖。 在类层次结构中,如果子类中的一个方法与父类中的方法有相同的方法名并具有相同数量和类型的参数列表,这种情况称为方法重写。,67,重写示例,class SuperClass int a;SuperClass() a = 10; public void printA()System.out.println(“父类中a =“+a);

24、class SubClass extends SuperClass int a;SubClass(int a) this.a = a; public void printA() System.out.println(“子类中a = ”+a+“n父类中的a=“+super.a(父类的a)); ,public class OverrideDemo public static void main(String args) SubClass s1 = new SubClass(20);s1.printA(); ,将调用子类的printA方法,68,super引用,在子类中引用父类同名成员 子类隐藏父类

25、成员变量 super.成员变量 子类覆盖父类成员方法 super.成员方法(参数列表) 调用父类的构造方法 super(参数列表),69,子类初始化,选择1 利用super明确调用父类构造函数 选择2 系统自动调用父类无参构造函数 Super(); 子类必须调用父类的构造函数目的:确保初始化 注意:super语句在子类构造函数第一行 默认构造函数=缺省构造函数=无参构造函数,70,方法的重载 重载(overload)是指同一个类中的多个方法可以同名但参数列表必须不同。 方法的覆盖(重写) 覆盖(override)是指子类声明并实现父类中的同名方法并且参数列表也完全相同。,71,方法的重写(ov

26、erride) vs 重载(overload),1、方法的重写是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系。 2、重写只能由一对方法产生关系;方法的重载是多个方法之间的关系。 3、重写要求参数列表相同;重载要求参数列表不同。 4、重写关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;重载关系,是根据调用时的实参表与形参表来选择方法体的。,72,多态性,编译时多态性 Person p1 = new Person(“李小明“,21); /对象获得本类的实例,对象与其获得的实例类型一致 Student s1 = new Student(“

27、王大伟“,19); p1.print(); /编译时多态性,执行Person类的方法 s1.print(); /编译时多态性,执行Student类覆盖的方法,73,多态性,运行时多态性Person p2 = new Student(“wang”,13,“computer”); /p2获得子类对象,对象引用与其指向的对象类型不一致 p2.print(); /运行时多态,执行Student类覆盖 的方法Object p3= new Student(“wang”,13,“computer”); Student p4=new Person(“wang”,14);,74,在person类中加入方法pub

28、lic int olderThan(Person p2可以传任何子类的对象) /比较两个人的年龄return this.age - p2.age;,75,父类对象引用不能调用子类新增加的成员变量和成员方法,Person p1= new Student(“lilei”,18,“computer”)错误p1.speciality=“software“; Student l1=(Student)p1;强制类型转换 l1.speciality=“software“;,76,多态( ploymorphism ),教师,77,学生类有基本的行为:上学(); 学生类的子类:孙悟饭类,土行孙类,小明类覆写了父

29、类的行为,即上学(); 教师类同学生类打交道,只要下达简单的指令:每个学生来上学就行了。而各学生子类是八仙过海各显神通了。,78,class Studentvoid goshool() class Sunwufan extends Studentvoid goshool()System.out.println(“孙悟饭坐跟斗云来到学校“); class Tuxingsun extends Studentvoid goshool()System.out.println(“土行孙遁地来到学校“); class Xiaoming extends Studentvoid goshool()System

30、.out.println(“小明步行来到学校里“); ,79,class Teacher void command(Student t)t.goshool();多态的实现,有利于程序的扩展 class Shool public static void main(String args) Teacher hf = new Teacher();Student s = new Student3;内存分配符,自动初始化s0 = new Sunwufan();s1 = new Tuxingsun();s2 = new Xiaoming();mand(s0);mand(s1);mand(s2); ,80,

31、再谈java中的包,在Java中,包主要有以下用途 : 包允许将类组合成较小的单元 有助于避免命名冲突 控制包中类、接口、成员变量和方法的可见性 包可以是类、接口和子包的集合,81,包的概念,什么是包 从逻辑概念看,包(package)是类的集合,一个包中包含多个类;.class 从存储概念看,包是类的组织方式,一个包对应一个文件夹,一个文件夹中包含多个字节码文件; 包与类的关系,就像文件夹与文件的关系一样。包中还可以再有子包,称为包等级,子包对应一个子文件夹。,82,创建和导入包,1 声明类所在的包 package 包1.包2; 例如, package edu.lytu.lisanfeng;

32、 /声明所在的包 public class Person 2 创建与包同名的文件夹 edu.lytu.lisanfeng 3 设置路径设置classpath 添加路径(两个位置),83,创建和导入包,导入包 import 包1.包2.类|接口|*; import edu.lytu.lisanfeng.Person; public class testPersonpublic static void main(String args)Person a = new Person(“ff“,33);a.print(); ,84,默认包路径:当前文件夹 包之间类及类中成员的访问权限 包中非内部的类或接

33、口只有2种访问权限:public和缺省。 在类中成员的4种访问权限中,public和private权限与包无关,而protected和缺省权限与包有关。,85,创建、声明和导入包,Java源程序结构 package /声明包,01句 import 系统提供的类库 /导入包,0多句 public class 或interface /声明公有类或接口,01句,文件名与该名相同,86,Java API基础,Java API(Java Application Programming Interface,Java应用程序接口),是Java语言提供的组织成包结构的许多类和接口的集合。Java API为用户

34、编写应用程序提供了极大的便利。Java API包含在JDK中,因此用户只要正确安装了JDK运行环境就可以使用了。,87,Java 中重要的包,包含了建立 Java 程序的基本类。您不需要显式地写出导入这个包的语句,任何程序中,该包都被自动导入。 这个包由对您的输入/输出操作有用的类组成。加*包括包里所有的类 import Java.io* 该包由您在浏览器中执行一个applet所需要的类组成。 该包对创建GUI 应用程序有用。 该包提供了许多创建如:lists, calendar, date等所需要的类和接口。 该包提供了许多进行TCP/IP网络编程的类和接口。,java.lang,java.

35、io,java.applet,java.awt,java.util,,88,类的静态成员,静态变量或方法也称为类的变量或方法。 类中的静态变量、方法属于类,而不属于某个特定的对象。 类名加成员调用 类的静态成员可以与类的名称一起使用,而无需创建类的对象。,用static修饰符修饰,可以是 成员变量、成员方法,89,静态变量,不管创建了类的多少对象,整个类中静态变量只有一个。 引用静态变量的方法: 通过引用类的任一对象 通过类的名称,class StaticDemo static int x = 0;StaticDemo()x+; ,StaticDemo d1 = new StaticDemo(

36、); StaticDemo d2 = new StaticDemo(); d1.x = 100 ; d2.x = 200;,通过类实例访问 不是一个好方法,StaticDemo d1 = new StaticDemo(); StaticDemo d2 = new StaticDemo(); StaticDemo.x = 100; StaticDemo.x = 200;,通过类名访问,90,public class Cat 猫编号private static int sid ;private String name; int id;Cat(String name) this.name = nam

37、e; id = +sid;public void info()System.out.println(“My name is “+name+“ No.“+id);public static void main(String arg)Cat mimi = new Cat(“mimi“);Cat pipi = new Cat(“pipi“);Cat lili=new Cat(“lili“);mimi.info(); pipi.info();lili.info(); ,91,静态方法,与静态方法相关的几个要点: 类的静态方法直接访问本类其他的成员时只能访问静态的,如果访问普通的编译出错。 静态方法没有

38、this 静态方法不能被覆盖为非静态方法,class StaticFun static int i = 10;int j;static void setValue(int x) j=x;/出错System.out.println(“ “+ i); ,不能访问非静态变量j,可以访问静态变量i,class StaticTest static void test() class Staticex extends StaticTestvoid test() /出错 ,92,class College public static void init() System.out.println(“临沂师范学

39、院“); class School public static void main(String args) for (int i=0;i3;i+) College.init (); ,93,抽象类和最终类,关键字abstract 语法:abstract class 类名abstract 方法 特点:不能生成自己的对象;用来被继承内部有0-n个抽象方法,94,抽象类示例,abstract class Employee int basic = 2000;abstract void salary();/抽象方法 class Manager extends Employeevoid salary()

40、 System.out.println(“薪资等于 “+basic*5);class Worker extends Employee void salary() System.out.println(“薪资等于 “+basic*2);,抽象方法没有方法主体,在子类中提供实现,在子类中提供实现,95,捕食,飞行,鸟类,燕子,老鹰,96,抽象类存在的价值,抽象类一般被设计为基类(父类超类),然后从抽象类基础上派生具体的类。抽象类中定义了基本的成员方法等。但是没有具体实现方法的细节。从抽象类继承的具体子类再对父类进行方法覆盖,从而实现了行为的多样性。 抽象类实质上对各子类应该具有什么行为提供一个统一

41、的规定。,97,抽象方法,抽象方法是不完整的方法,只有声明没有方法体。是个半成品。 当成员方法被声明为抽象方法时,所属的类一定是抽象类。普通类是没有是抽象方法 抽象类可以有非抽象方法。可以没有抽象方法。 抽象类是用来继承的,而且子类一定要实现抽象父类其中的抽象方法.除非子类仍然是抽象类。,98,图3.8 图形抽象类及其子类,99,【例3.8】 抽象类与抽象方法。,设计抽象的平面图形类PlaneGraphics1 设计长方形类Rectangle1,继承平面图形类。 设计椭圆类Ellipse1,继承平面图形类。 使用平面图形类及其子类 抽象方法的必要性,100,public abstract cl

42、ass PlaneGraphics1 /平面图形类,抽象类 private String shape; /形状public PlaneGraphics1(String shape)/构造方法,不能是抽象方法this.shape = shape;public PlaneGraphics1()this(“未知“);public abstract double area(); /计算面积,抽象方法,分号“;“必不可少 public void print() /显示面积,非抽象方法System.out.println(this.shape+“面积为 “+this.area(); this是子类的对象

43、子类将area实现了 ,101,public class Ellipse1 extends PlaneGraphics1 /椭圆类 protected double radius_a; /a轴半径protected double radius_b; /b轴半径public Ellipse1(double radius_a, double radius_b) /构造方法super(“椭圆”); / this.shape=shape;系统自动加this.radius_a = radius_a;this.radius_b = radius_b;public Ellipse1()this(0,0);p

44、ublic double area() /计算椭圆面积,实现父类的抽象方法return Math.PI * this.radius_a * this.radius_b; ,102,final 关键字/final类,final 修饰符可应用于类、方法和变量。 final在应用于类、方法和变量时意义是不同的,但本质是一样的:final表示不可改变。 声明为final的类不能被继承。 final 类示例:java.lang.String,final class TestFinal int i = 7;int j = 1;void f() class Further extends TestFinal

45、 ,final类不能被继承,103,final 方法,如果一个类为 final 类,那么它的所有方法自动为 final 方法。在方法声明中使用 final 关键字向编译器表明子类不能覆盖此方法。,class TestFinal final void f() class Further extends TestFinal final void f() ,final方法不能被覆盖,104,final 变量,一个变量可以声明为final,这样做的目的是阻止它的内容被修改。 声明final变量后,只能被初始化一次,然后就不能对其值进行修改。 一个final变量实质上是一个常量。,class Final

46、Demo public static void main(String args)final int noChange = 20;noChange = 30; ,final变量不能被修改,105,class Cylinder /圆柱体private double r; /半径private double h; /高public static final double PI=3.14; 尽量不用数字,字符串public Cylinder(double r,double h)this.r=r;this.h=h;public double getCircumference() /返回圆柱体底面的周长

47、return 2*PI*r;public double getBottomArea() /返回圆柱体底面的面积return PI*r*r;public double getAllArea() /返回整个圆柱体的面积return 2*PI*r*r+2*PI*r*h;public double getVolume() /返回整个圆柱体的体积return PI*r*r*h; ,106,接口,接口是一种更抽象的抽象类。 接口只包含抽象方法,不能有任何具体的方法。 接口也可用来定义一组常量。 Java 程序一次只能继承一个类但可以实现几个接口。一个类可以实现多个接口,107,接口与实现接口的类,声明接口 public interface 接口 public static final 数据类型 成员变量=常量值;系统给加public abstract 返回值类型 成员方法(参数列表); 例如, public interface Plane1 /平面图形接口 int KK=3;double area(); /计算面积 系统给加 ,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报