第03讲-面向对象程序设计2.ppt_第1页
第03讲-面向对象程序设计2.ppt_第2页
第03讲-面向对象程序设计2.ppt_第3页
第03讲-面向对象程序设计2.ppt_第4页
第03讲-面向对象程序设计2.ppt_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java程序设计视频教程,本讲主题 面向对象程序设计(二),本讲主讲教师:黄洪,2,第三讲 面向对象程序设计(2),类中变量的作用域 成员变量的作用域 参数和方法中定义的变量的作用域 语句块中定义变量的作用域 如何处理成员变量与方法中变量同名的问题 参数传递 继承 多态:方法的重载与覆盖,任务,运输工具Vehicle都有名称(name)、品牌(brand)、最大载重量(loadCapacity)、当前载重量(load)、最高速度(maxSpeed)、速度(speed)等属性,也都有移动(move),加速(speedUp)、减速(slowDown)、停止(stop)等方法。飞机Plane、汽车C

2、ar、轮船Ship、马车Wagon概不例外。虽然都有move和stop方法,但其实现不同。其他方法的实现相同。请编写相应的类,尽量少写相同的代码。,3,4,class Student String name; char sex; int stuID; public Student() public Student(String stuName,char sex,int stuID) name=stuName; this.sex=sex; this.stuID=stuID; public void setName(String stuName) name=stuName; public void

3、 setSex(char sex) this.sex=sex; public void setStuID(int stuID) this.stuID=stuID; public static void main (String args) Student s=new Student30; for(int i=0;is.length;i+) s=new Student(); ,成员变量name,sex和stuID的作用域为整个类,参数stuName的作用域为该参数所在的方法,for语句块中的变量i的作用域仅局限于该for语句块,成员变量sex与方法中定义的变量sex同名时,成员变量在该方法中被隐

4、藏,若要引用,则用this.变量名,例 类中变量的作用域 的例子,5,成员变量与局部变量同名的处理,成员变量与局部变量同名时,在成员变量前加this.予以区分。 this的用法 用this指代对象本身 访问本类的成员: this. this. 调用本类的构造方法: this(参数列表),6,参数传递,调用方法时,参数传递方式是值传递,即把实际参数的值传递给形式参数 参数是基本数据类型时,传递的为实际值 参数是引用类型时,传递是对象的地址,7,例:方法调用的参数传递,public class PassTest float ptValue; /参数类型是基本类型 public void chang

5、eInt(int value) value = 55 ; /参数类型是引用型,并且方法中改了变参数的值 public void changeStr(String value) value = new String(different); /参数类型是引用型,且方法中改变了参数所引用对象的成员变量值 public void changeObjValue( PassTest ref) ref.ptValue = 99.0f; ,8,public static void main(String args ) String str; int val; /创建PassTest的对象 PassTest p

6、t= new PassTest( ); /测试基本类型参数的传递 val = 11; pt.changeInt(val); System.out.println(Int value is: +val); /测试引用类型参数的传递 str = new String(Hello); pt.changeStr(str); System.out.println(Str value is: +str); /测试引用类型参数的传递 pt.ptValue = 101.0f ; pt.changeObjValue(pt); System.out.println(Pt value is: +pt.ptValue

7、); ,9,分析1:基本类型参数的传递,val = 11; pt.changeInt(val); System.out.println(Int value is: +val);,public void changeInt(int value) value = 55 ; ,Val的值11传递给value,22行调用第4行的方法changeInt,value值的改变不影响val值 23行的输出结果为: Int value is:11,10,分析2:引用类型String参数的传递,str = new String(Hello); pt.changeStr(str); System.out.print

8、ln(Str value is: +str);,public void changeStr(String value) value = new String(different); ,str的引用地址值传递给value,26行调用第8行的方法changeStr,value值的改变也不影响str值 27行的输出结果为: Str value is:Hello,11,分析3:引用类型PassTest参数的传递,pt.ptValue = 101.0f ; pt.changeObjValue(pt); System.out.println(Pt value is: +pt.ptValue);,publi

9、c void changeObjValue( PassTest ref) ref.ptValue = 99.0f; ,pt的引用地址值传递给ref,30行调用第12行的方法changeObjValue ,ref对成员变量值 的改变也影响调用参数pt的成员变量值 31行的输出结果为: Pt value is:99.0,12,课堂练习:仔细阅读下面的程序 ,输出结果是什么?,class ValHold public int i = 10; public class ObParm public static void main(String argv) ObParm o = new ObParm()

10、; o.aMethod(); public void aMethod() int i = 99; ValHold v = new ValHold(); v.i = 30; another(v , i); System.out.println(v.i); ,public void another(ValHold v, int i) i = 0; v.i = 20; ValHold vh = new ValHold(); v = vh; System.out.println(v.i); System.out.println(i); ,13,继承,继承是一种程序复用手段。当多个类(Sub1,Sub2

11、)之间存在相同的属性和方法时,可以把这些相同的属性和方法设计为一个类,然后让Sub1,Sub2继承这个类,这样就不必在Sub1,Sub2中重复写相同的代码了。 被继承的类称为父类(超类/基类)。 从超类派生出来的类称为子类。 Java只支持单继承,不支持多继承,14,继承的层次结构,一个子类可以成为另一个类的超类。,15,继承的基本语法, class extends 子类体 例:public class Sub extends Base,16,Student和Teacher继承People,17,例:Student和Teacher继承People,public class People Str

12、ing name; char sex; int age; public String getName() return name; public char getSex() return sex; public int getAge() return age; public String printInfo() System.out.println(name:+name+ sex:+sex+ age:+age); ,18,例:Student和Teacher继承People,public class Student extends People String studentID; String

13、major; public String getMajor() return major; public String getStudentID() return studentID; ,19,例:Student和Teacher继承People,public class Teacher extends People String teacherID; String department; public String getDepartment() return department; public String getTeacherID() return teacherID; ,20,子类继承

14、超类的成员变量,继承原则:子类只继承超类中非private的成员变量 隐藏原则:在子类中定义与超类成员变量同名的成员变量时,超类的成员变量被隐藏(不能继承),21,例:声明Person类,再声明一个Student类作为Person的子类,class Person protected String name; protected int age; protected String address; public void setPerson(String name,int age,String addr) =name; this.age=age; address=addr; c

15、lass Student extends Person String address; String department; public void setStudent(String name,int age,String addr1,String addr2,String de) setPerson(name,age,addr1); address=addr2; department=de; ,22,例:代码(续),public class StudentDemo public static void main(String args) Person p=new Person(); Stu

16、dent s=new Student(); p.setPerson(Tom,20,121 North street); s.setStudent(Jhon,19,234 South street,336 West Street,Computer); System.out.println(The object of Person: ++,+p.age+,+p.address); System.out.println(The object of Student: ++,+s.age+,+s.address+,+s.department); ,23,子类继承超类的成员方法,继

17、承原则:子类只继承超类中非private的成员方法。 覆盖原则:子类的成员方法和超类的成员方法同名时,超类的成员方法被子类的成员方法覆盖(不能继承)。,24,super关键字,super表示对某个类的超类的引用。 如子类和超类有同名的成员变量或方法,则: super. super. 表示引用超类的成员(如无super则表示子类中的同名成员),25,多态,多态性是指同一个名字的若干个方法,有不同的实现(即方法体中的代码不一样)。 多态的两种表现形式: (1) 同一类中的同名方法,称为方法重载overloading:同一类中允许有多个同名方法,这些方法能够通过参数的量与型的差异加以区分。 (2)

18、子类对父类方法的重新定义,称为方法覆盖overriding:方法名、返回值和参数形态完全一样。,26,方法的重载,一个类中,有若干个方法名字相同,但方法的参数不同,称为方法的重载。 在调用时, Java执行方法名、参数个数和参数类型完全相同的方法体。,27,Java标准输出方法的重载,28,例:下面程序中第4行调用哪一行的show方法?,public class Test public static void main(String argv) Test t = new Test(); t.show(1+3); public void show(int Val1,int Val2) Syste

19、m.out.println(Val1+Val2); public void show(int Val1) System.out.println(Val1); public void show(int Val1,int Val2,int Val3) System.out.println(Val1+Val2+Val3); ,29,方法重载的原则,方法名相同。 方法的参数类型、个数、顺序只要有一项不相同。 返回类型、修饰符可相同或不相同。 public int area(int r) public float area(int h,float r) public float area(float h

20、,int r) 是正确的方法重载,而下面的则不是正确的方法重载: public int area(float h,float r) public float area(float h,float r) 构造方法也能重载,30,激活重载的构造方法,在一个构造方法中可以利用另一个构造方法。 class People private String name; private int age; public People(String n, int age) name = n ; this.age = age; public People( String n) this(n,0); public Pe

21、ople( ) this(“Unknown”); ,31,方法的覆盖(重写),在子类和超类中有同名的方法(参数也相同),子类中的方法覆盖超类的方法。 如果超类和子类有同名且参数相同的方法,那么超类的对象调用超类的方法,子类的对象调用子类的方法。 通过覆盖可以使同名的方法在不同层次的类中有不同的实现,32,方法覆盖的原则(1),1、子类方法的名称、参数签名和返回类型必须与其父类的方法的名称、参数签名和返回类型一致 public class Base public void method(). public class Sub extends Base public void method(). public int method(int a) return 0; ,33,方法覆盖的原则(2),2、子类方

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论