好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

北大青鸟JAVAC3.ppt

31页
  • 卖家[上传人]:夏**
  • 文档编号:569519850
  • 上传时间:2024-07-30
  • 文档格式:PPT
  • 文档大小:170KB
  • / 31 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • Version 3.0第三章第三章类和对象类和对象 回顾回顾•Java 具有具有8种基本数据类型:种基本数据类型:int、、boolean、、char、、short、、long、、float 及及 double•Java 中的运算符可划分为四大子集:算术中的运算符可划分为四大子集:算术运算符、位运算符、关系运算符、逻辑运算运算符、位运算符、关系运算符、逻辑运算符符•Java 支持下列控制结构:选择、循环、跳支持下列控制结构:选择、循环、跳转转•数组可用来将同一类型的数据存储在连续的数组可用来将同一类型的数据存储在连续的内存位置内存位置2 2 目标目标•掌握如何创建类和构造对象掌握如何创建类和构造对象•掌握方法的重载和覆盖掌握方法的重载和覆盖•了解类的继承了解类的继承•了解包概念了解包概念3 3 类和对象类和对象2-1•对象表示现实世界中某个具体的事物对象表示现实世界中某个具体的事物•抽象是从特定的实例中抽取共同的性质以形抽象是从特定的实例中抽取共同的性质以形成一般化概念的过程成一般化概念的过程•对象具有两方面的含义:对象具有两方面的含义:9 在现实世界中:在现实世界中:在现实世界中:在现实世界中:是客观世界中的一个实体是客观世界中的一个实体是客观世界中的一个实体是客观世界中的一个实体9 在计算机世界中:在计算机世界中:在计算机世界中:在计算机世界中:是一个可标识的存储区域是一个可标识的存储区域是一个可标识的存储区域是一个可标识的存储区域4 4 类和对象类和对象 2-2•类是具有共同属性类是具有共同属性和行为的对象的抽和行为的对象的抽象。

      象•类可以定义为数据类可以定义为数据和方法的集合和方法的集合•类也称为模板,因类也称为模板,因为它们提供了对象为它们提供了对象的基本框架的基本框架类对象抽抽象象实实例例化化属性或状态属性或状态操作或行为操作或行为数据或变量数据或变量方法方法封装的实体封装的实体=数据数据+方法方法5 5 创建类创建类 class name {  type variable1;  …  type variableN;   type methodname1(parameter-list){     //方法体方法体  }  …  type methodnameN(parameter-list){    //方法体方法体  }} 在类中,属性是通过成员变在类中,属性是通过成员变量体现的,而操作是用成员量体现的,而操作是用成员函数(又称为方法)实现的函数(又称为方法)实现的Java中定义类的通用格中定义类的通用格式:式:成员变量(对象属性)成员变量(对象属性)成员方法成员方法(对象行为(对象行为或操作)或操作)6 6 定义方法定义方法•定义方法的一般格式:定义方法的一般格式:[access] type methodname1([parameter-list]){   //方法体方法体}发往某个对象的消息对应于发往某个对象的消息对应于一个方法调用。

      作为对消息一个方法调用作为对消息的响应,对象将执行一个类的响应,对象将执行一个类似于过程体的方法方法是似于过程体的方法方法是包含在类中的函数包含在类中的函数方法名称方法名称返回类型返回类型修饰符,修饰符,可选可选参数列表,参数列表,可选可选•举例:举例:public void setdate(int day, int month, int year){  day=23; month=7; year=2003;}7 7 对象作为参数对象作为参数class Test{  int a,b;  Test(int i,int j) {    a=i;    b=j;  } //可以在函数中改变可以在函数中改变对象状态对象状态  void  change(Test  obj) {    obj.a=50;    obj.b=40;  }} 当对象作为函数参数时,当对象作为函数参数时,在函数中只能改变该对在函数中只能改变该对象的状态,但不能改变象的状态,但不能改变该对象的引用该对象的引用void s(Day x,Day y){   Day temp=y;   y=x;   x=temp;} 引用本身引用本身按值传递按值传递Day2002,5,30Day2003,7,23obj1obj2xy调用调用s(obj1,obj2)改变对象改变对象状态状态xy8 8 this引用引用public class PassTest {  int x;  PassTest(int x) {    this.x=x;  }  public void passingValue(){    System.out.println(“x 等于等于 " +x);     }  public static void main(String args[]) {    PassTest test = new PassTest(10);    test.passingValue();  }} v关键字关键字 this 与对象关联与对象关联v它用于指示当前对象它用于指示当前对象指明此对象的变指明此对象的变量量 x x 应赋值为应赋值为通过构造函数传通过构造函数传递的自变量递的自变量 x x 的值。

      的值 9 9 简单访问控制简单访问控制 - private 和和 public•public 声明的数据成员和声明的数据成员和成员函数可从类外部的任成员函数可从类外部的任何地方访问何地方访问 •而而private 数据将被隐藏,数据将被隐藏,在类外不可见,这就实现在类外不可见,这就实现了数据封装的思想了数据封装的思想•要从类外操纵要从类外操纵private 成成员,只能通过类的员,只能通过类的public或或protected成员来实现成员来实现 1010 方法重载(方法重载(overloading))•方法重载是方法重载是Java实现面向对象的多态性机实现面向对象的多态性机制的一种方式制的一种方式•同一个类中多个方法有相同的名字,不同同一个类中多个方法有相同的名字,不同的参数列表,这种情况称为方法重载的参数列表,这种情况称为方法重载•返回类型不同并不足以构成方法重载返回类型不同并不足以构成方法重载•当重载方法被调用时,编译器根据参数的当重载方法被调用时,编译器根据参数的类型和数量来确定实际调用哪个重载方法类型和数量来确定实际调用哪个重载方法的版本1111 方法重载示例方法重载示例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.println("两个浮点数相加得两个浮点数相加得"+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("早上早上", "好好"); }} 编译器决定编译器决定调用版本调用版本1212 构造函数构造函数•构造函数名称与类名称相同构造函数名称与类名称相同•构造函数没有返回类型构造函数没有返回类型•其任务是在创建对象时初始化其内部状态其任务是在创建对象时初始化其内部状态class Fruit { boolean seedLess; boolean seasonal; float price; Fruit(boolean seed, boolean season, float p) {    seedLess = seed;  seasonal = season;  price    = p; } }1313 创建对象创建对象•使用下列语法可创建对象:使用下列语法可创建对象: new 构造函数构造函数•关键字关键字 new 通常称为创建运算符,用于分通常称为创建运算符,用于分配对象内存,并将该内存初始化为缺省值。

      配对象内存,并将该内存初始化为缺省值•一旦一旦 new 完成分配和初始化内存,它就将完成分配和初始化内存,它就将调用构造函数来执行对象初始化调用构造函数来执行对象初始化 当创建一个类时,只是创当创建一个类时,只是创建了一种新的数据类型建了一种新的数据类型对象是类的一个实例对象是类的一个实例class FruitDemo { public static void main(String args[]){  Fruit f = new Fruit(true,false,50.0F); }} 创建对象创建对象1414 缺省初始值缺省初始值•Java 保证了在任何代码使用该内存之前,保证了在任何代码使用该内存之前,已至少将内存初始化为可预知的缺省值已至少将内存初始化为可预知的缺省值 1515 重载构造函数重载构造函数•Java 为每一个类自动提供缺省构造函数为每一个类自动提供缺省构造函数•缺省构造函数将成员变量的值初始化为缺省构造函数将成员变量的值初始化为缺省值缺省值•一旦创建了自己的构造函数,缺省的构一旦创建了自己的构造函数,缺省的构造函数将不复存在造函数将不复存在•重载构造函数提供了一组创建对象的方重载构造函数提供了一组创建对象的方式,可以根据需要决定是否带初始参数。

      式,可以根据需要决定是否带初始参数 public class constructOverload {  int x;  constructOverload() {    x=0; System.out.println("不带参数的构造函数不带参数的构造函数");  }  constructOverload(int x){     this.x=x;     System.out.println("带带一个参数的构造函数一个参数的构造函数");  } }1616 继承继承•被继承的类称为父类被继承的类称为父类•继承父类的类称为子类继承父类的类称为子类•执行继承时,子类将获得父类的属性,并执行继承时,子类将获得父类的属性,并具有自身特有的属性具有自身特有的属性 继承是面向对象编程技术的一块继承是面向对象编程技术的一块基石,它允许创建分等级层次的基石,它允许创建分等级层次的类运用继承,可以创建一个通类运用继承,可以创建一个通用类定义一系列一般特性该类用类定义一系列一般特性该类可以被更具体的类继承可以被更具体的类继承Emoloyee类:类: name sexWorker类:类: category dressAllowanceOfficer类:类:  empClass  vehicle职员类,具职员类,具有姓名和性有姓名和性别两个属性别两个属性工人类,继承了父工人类,继承了父类的姓名和性别属类的姓名和性别属性外还包含类别和性外还包含类别和是否有服装津贴属性是否有服装津贴属性主任类,还包含主任类,还包含级别和是否配备级别和是否配备交通工具属性交通工具属性1717 extends关键字关键字•extends关键字用于继承类。

      关键字用于继承类•声明一个继承父类的类的通常形式如下:声明一个继承父类的类的通常形式如下: class subclass-name extends superclass-name { //类体类体 } ò没有没有extends,,默认父类为默认父类为Objectò只能有一个父类,即单继承只能有一个父类,即单继承ò子类继承父类的全部成员子类继承父类的全部成员注意注意1818 super关键字关键字•super关键字用来解决如何直接访问或初关键字用来解决如何直接访问或初始化从父类继承来的属性始化从父类继承来的属性•super有两种通用形式:调用父类的构造有两种通用形式:调用父类的构造函数、用来访问被子类的成员覆盖的父类函数、用来访问被子类的成员覆盖的父类成员 •它用在对象的构造函数中,将构造细节通它用在对象的构造函数中,将构造细节通过继承链往上传递过继承链往上传递•super()必须是在子类构造函数中的第一个必须是在子类构造函数中的第一个执行语句执行语句1919 继承示例继承示例class Employee {  String name; //姓名姓名  char sex;    //性别性别  Employee(String n, char s){    name = n;  sex = s;  }  public String getName() { return name; }  public char getSex(){  return sex;}}class Worker extends Employee {   char category;//类别类别   boolean dressAllowance; //是否提供服装津贴是否提供服装津贴    Worker(String n,char s,char c,boolean d){      super(n,s);            category = c; dressAllowance = d;   }   public char getCategory(){return category;}    public boolean getAll(){ return dressAllowance; }}class InheDemo {  public static void main(String args[]) {   Worker w = new Worker("M.John",'M','B',true); System.out.println("工人工人信息信息");   System.out.println("姓名姓名 :: "+w.getName());   System.out.println("性别性别 :: "+w.getSex()); System.out.println("类别类别 :: "+w.getCategory());   if(w.getAll())      System.out.println("提供提供服装津贴服装津贴");   else      System.out.println(“未提供未提供服装津贴服装津贴”);   }}2020 instanceofclass Student {}class Graduate extends Student {}class UndergraduateStudent extends Student {}public class st { public static void main(String []args) {  UndergraduateStudent s1 = new UndergraduateStudent();  Graduate s2=new Graduate();  Student x;  x=s1;  if (x instanceof UndergraduateStudent)   System.out.println(“x是是UndergraduateStudent类的实例类的实例。

      );  else   System.out.println(“x是是Graduate类的实例类的实例); }} instanceof 测试第一个参数测试第一个参数的运行时类型是否为与第二的运行时类型是否为与第二个参数兼容的赋值个参数兼容的赋值x在运行时指向在运行时指向s1,,所以所以if语句语句条件返回条件返回true2121 类型转换类型转换•执行自动类型转换需要两个条件:执行自动类型转换需要两个条件:–接受转换的两种类型是兼容的接受转换的两种类型是兼容的–目的类型数的范围比源类型的大目的类型数的范围比源类型的大•强制类型转换语句的通用格式如下:强制类型转换语句的通用格式如下: (目标类型)(目标类型)valueUndergraduateStudent s1 = new UndergraduateStudent(); Graduate s2=new Graduate();Student x;x=s1;Graduate s3=new Graduate();if (x instanceof Graduate)     s3= (Graduate)x; 注意:从父类到子类注意:从父类到子类的转换,建议在转换的转换,建议在转换前判断父类是否指向前判断父类是否指向子类的对象子类的对象2222 Object 类类•Object类是类体系结构的根类是类体系结构的根•Java 系统中的每个类都是系统中的每个类都是 Object 类直接类直接或间接的子类或间接的子类•Object 类包括在类包括在 java.lang 包中包中•此类定义了所有对象都具备的基本状态和此类定义了所有对象都具备的基本状态和行为行为•可以用类型为可以用类型为Object的变量来引用任意类的变量来引用任意类型的对象型的对象 2323 equals()•用于比较两个对象是否相等,相等返回用于比较两个对象是否相等,相等返回 true•Object 类中提供的类中提供的 equals 方法使用恒等函数来方法使用恒等函数来确定对象是否相等确定对象是否相等•Object类中实现的类中实现的equals方法只能用来判断两个方法只能用来判断两个不同的对象是否指向同一个内存区域不同的对象是否指向同一个内存区域•子类一般通过覆盖子类一般通过覆盖Object的的equals方法实现有意方法实现有意义的测试,可以实现:若同一类型的两个不同对义的测试,可以实现:若同一类型的两个不同对象包含相同的信息即返回象包含相同的信息即返回true Integer one = new Integer(1);Integer anotherOne = new Integer(1);if (one.equals(anotherOne))    System.out.println("对象相等对象相等"); 2424 toString()•toString 用于返回对象的字符串表示。

      用于返回对象的字符串表示 •建议所有子类都覆盖此方法建议所有子类都覆盖此方法•使用使用“+”运算符将对象同一个字符串连接,运算符将对象同一个字符串连接,Java编译器会自动调用编译器会自动调用toString方法,获取对象方法,获取对象的字符串表现形式的字符串表现形式 Derived d = new Derived();System.out.println("Derived 的的 toString() :: " + d);自动调用自动调用d.toString方法,获取对象的字方法,获取对象的字符串表示形式符串表示形式2525 方法覆盖(方法覆盖(override))•方法覆盖是方法覆盖是Java实现多态性机制的另一种方式实现多态性机制的另一种方式•在类层次结构中,如果子类中的一个方法与父类在类层次结构中,如果子类中的一个方法与父类中的方法有相同的方法名并具有相同数量和类型中的方法有相同的方法名并具有相同数量和类型的参数列表,这种情况称为方法覆盖的参数列表,这种情况称为方法覆盖•当一个覆盖方法通过父类引用被调用,当一个覆盖方法通过父类引用被调用,Java根据根据当前被引用对象的类型来决定执行哪个版本的方当前被引用对象的类型来决定执行哪个版本的方法。

      法 •可以通过可以通过super关键字调用直属父类中被覆盖的关键字调用直属父类中被覆盖的方法版本方法版本2626 方法覆盖示例方法覆盖示例class SuperClass { int a; SuperClass(){ a = 10; } public void printA(){System.out.println("父类中父类中a ="+a);}}class SubClass extends SuperClass { int a; SubClass(int a){ this.a = a;  } public void printA(){ System.out.println("子类中子类中a = "+a); }} public class OverrideDemo {   public static void main(String args[]) {      SuperClass s1 = new SubClass(10);    s1.printA();   }}将调用子类的将调用子类的printA方法方法2727 包包•在在Java中,中,包主要有以下用途包主要有以下用途 ::–包允许将类组合成较小的单元包允许将类组合成较小的单元 –有助于避免命名冲突有助于避免命名冲突 –包允许在更广的范围内保护类、数据和方法包允许在更广的范围内保护类、数据和方法 •包可以是类、接口和子包的集合包可以是类、接口和子包的集合2828 使用包使用包•创建包创建包package  mypackage; •访问访问 Java 包成员包成员   mypackage.My_Class•导入包导入包import package_name.*;•导入子包导入子包import package_name.*;2929 总结总结2-1•对象代表现实世界中的实体对象代表现实世界中的实体 •类是对象的抽象,将对象的属性和行为类是对象的抽象,将对象的属性和行为 抽抽象为类中的数据和方法。

      象为类中的数据和方法•在在 Java 中,中,extends 关键字用于继承类关键字用于继承类•super关键字用来解决如何直接访问或初关键字用来解决如何直接访问或初始化从父类继承来的属性始化从父类继承来的属性 •构造函数没有返回类型,名称与类的名称构造函数没有返回类型,名称与类的名称相同•关键字关键字 this 与对象关联用于指明当前对象与对象关联用于指明当前对象3030 总结总结 2-2•instanceof 测试第一个参数的运行时类型测试第一个参数的运行时类型是否为与第二个参数兼容的赋值是否为与第二个参数兼容的赋值•Object 类是类体系结构的根类是类体系结构的根 •同一个类中多个方法有相同的名字不同的同一个类中多个方法有相同的名字不同的参数列表称为方法重载参数列表称为方法重载•若子类中与父类中的某方法有相同的方法若子类中与父类中的某方法有相同的方法名并具有相同数量和类型的参数列表,称名并具有相同数量和类型的参数列表,称为方法覆盖为方法覆盖•包是类、接口和其他子包的集合包是类、接口和其他子包的集合 3131 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.