06面向对象程序设计1-zw_第1页
06面向对象程序设计1-zw_第2页
06面向对象程序设计1-zw_第3页
06面向对象程序设计1-zw_第4页
06面向对象程序设计1-zw_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、面向对象程序设计1ID:SCSJ001-Java Basic Syntax2005-10-101课程目标信息的隐藏和封装this关键字访问控制对象的构造和初始化方法的重载(overload)静态域与静态方法(static)2005-10-102信息的隐藏和封装隐藏:指的是对象的一种保护机制,使得它的属性或方法不被外部的程序直接访问封装指的是将对象的状态信息(属性)和行为(方法)捆绑为一个逻辑单元的机制。public class Student public int age;public class StudentTest public static void main(String args)

2、Student s = new Student();/合“法”但不合理的设置s.age = 1000;2005-10-103为什么需要封装 ?编写一个类,代表softeem学员,要求:具有属性:姓名、年龄具有行为:自我介绍softeem学员的最小年龄要求:18岁public class SofteemStudentpublic String name; / 学员姓名public int age; /年龄/* * 返回自我介绍的内容 */public String introduction() return “大家好!我是” + name + “,我今年”+ age+“岁!;2005-10-10

3、4编写一个测试类,要求:实例化一个学员对象,并对其初始化在控制台输出该学员的自我介绍public class SofteemStudent1Test public static void main(String args) SofteemStudent sstu = new SofteemStudent (); = “周博通;sstu.age =8;System.out.println(roduction(); 要满足学员的最小年龄要求,可以通过对属性的封装来实现大家好!我是周博通,我今年8岁!2005-10-105public class SofteemSt

4、udent2private String name; / 学员姓名/ 返回学员姓名public String getName() return name;/ 设定学员姓名public void setName(String name) = name;在java程序中,我们可以这样实现封装:将属性私有化,提供公有方法访问私有属性通过这些公有方法访问私有属性 SofteemStudent2 sstu = new SofteemStudent2();sstu.setName (“周博通);String sName = sstu.getName();通过setter、getter方

5、法访问name属性this代表当前类的实例,方法的调用者本身2005-10-106public class SofteemStudent2private String name; / 学员姓名/ 返回学员姓名public String getName() return name;/ 设定学员姓名public void setName(String name) = name;在java程序中,我们可以这样实现封装:将属性私有化,提供公有方法访问私有属性通过这些公有方法访问私有属性 SofteemStudent2 sstu = new SofteemStudent2();sst

6、u.setName (“周博通);String sName = sstu.getName();通过setter、getter方法访问name属性this代表当前类的实例,方法的调用者本身2005-10-107封装的实现:1、修改属性的可见性来限制对属性的访问2、为每个属性创建一对赋值(setter) 和取值(getter) 的公共方法,用于对这些属性的访问3、在setter和getter方法中,加入对属性的存取限制public class SofteemStudent2private String name; /学员姓名private int age; /年龄public int getAge

7、() return age;public void setAge(int age) if (age18) System.out.println(错误!最小年龄应为18岁!);this.age = 18; /如果不符合年龄要求,则赋予默认值 else this.age = age; /此处省略对name属性的setter、getter方法1232005-10-108public class SofteemStudent2Test public static void main(String args) SofteemStudent2 sstu = new SofteemStudent2();ss

8、tu.setName (“周博通);sstu.setAge(8);System.out.println(roduction();错误!最小年龄应为18岁!大家好!我是周博通,我今年18岁!测试类通过调用setter方法,为对象的各个属性赋值2005-10-109封装的好处1隐藏一个类的实现细节2防止对封装数据的未经授权的访问3有利于保证数据的完整性5有选择地向外界提供数据4便于修改,增强代码的可维护性2005-10-1010this关键字Java中为解决变量的命名冲突和不确定性问题,引入关键字“this”代表其所在方法的当前对象。构造器中指该构造器所创建的新对象 方法中指调用该

9、方法的对象this关键字的用法在类本身的方法或构造器中引用该类的实例变量和方法用来调用其他的重载的构造器2005-10-1011ThisDemopublic class ThisDemo private String demo;private int age;public String getDemo() return demo;public ThisDemo()/* * param demo * 调用无参数的构造函数 * 调用类的成员变量 */public ThisDemo(String demo)/ThisDemo t= new ThisDemo();this();this.age=18;

10、public void simple() this.print(); public void print() System.out.println(print();); /避免引起歧义 public void setDemo(String demo) this.demo = demo; 2005-10-1012访问控制在Java中,可以在类、类的属性以及类的方法前面加上一个修饰符(modifier),来对类进行一些访问上的控制。修饰符同一个类中同一个包中子类中全局privateYesdefaultYesYesprotectedYesYesYespublicYesYesYesYes2005-10

11、-1013访问控制访问控制的限制程度从高到低如下图所示。注意,default不是一个修饰符,它只是用来表示一种不加任何修饰符时的状态。privatedefaultprotectedpublic2005-10-1014完整的类定义语法访问控制符修饰符 class 类名 extends 超类 implements 接口表 /类体构造函数成员变量成员方法2005-10-1015为什么需要构造方法?开发softeem学员类SofteemStudent3,要求:具有属性:姓名、年龄、学号具有行为:自我介绍public class SofteemStudent3private String name; /

12、 姓名private int age; / 年龄private String code; / 学号public String introduction() return “大家好!我是” + name + “,我今年” + age + “岁,学号“ + code;/ 以下是属性的setter、getter方法,此处省略2005-10-1016编写一个测试类,要求:实例化一个学员对象,并对其初始化在控制台输出该学员的自我介绍public class SofteemStudent3Test public static void main(String args) SofteemStudent3 s

13、stu = new SofteemStudent3 ();sstu.setName(“杨过);sstu.setAge(22);sstu.setCode(“007);System.out.println(roduction();要简化对象初始化的代码,可以通过构造方法来解决 大家好!我是杨过,我今年22岁,学号007SofteemStudent中有太多的属性及对应的setter方法,在初始化时,很容易就忘记了,有没有可能简化对象初始化的代码?2005-10-1017构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值public class SofteemStudent3

14、 private String name; / 学员姓名/ 构造方法public SofteemStudent3() name = 无名氏;public class SofteemStudent3Test public static void main(String args) SofteemStudent3 sstu = new SofteemStudent3 ();使用new关键字调用构造方法2005-10-1018通过带参数的构造方法,显式地为实例变量赋予初始值 public class SofteemStudent3private String name; / 教员姓名private

15、int age; / 年龄private String code; / 学号/ 带参数的构造方法public SofteemStudent3(String pName,int pAge,String pCode) name = pName;age = pAge; / 可以增加对age等属性的存取限制条件code = pCode;public String introduction() return 大家好!我是 + name + ,我今年 + age + 岁,学号 + code;带参数的构造方法 2005-10-1019通过调用带参数的构造方法,简化对象初始化的代码public class S

16、ofteemStudent3Test public static void main(String args) SofteemStudent3 sstu = new SofteemStudent3 (“杨过, 22, “007);System.out.println(roduction();创建对象时,一并完成了对象成员的初始化工作大家好!我是杨过,我今年22岁,学号0072005-10-1020对象的构造和初始化Student s1;为引用类型变量分配引用空间new Student (Lisa,Male,1,18 ); 创建一个新的对象,并进行属性(实例变量)的默认初始化 各

17、种数据类型作为实例变量时的默认初始值参见下表nulls1nullnull0namesexgrade0age2005-10-1021对象的构造和初始化执行构造方法:将传递进来的四个参数的值分别赋给四个属性s1 = new Student(Lisa,Male,1,18);nulls1“Lisa”“male”1namesexgrade18age2005-10-1022对象的构造和初始化最后,对引用类型变量s1赋值。将新创建的Student对象的存储空间的首地址赋给s10 x1a4afb“Lisa”“male”1namesexgrade18ages10 x1a4afb2005-10-1023构造方法小

18、结构造方法是类的一种特殊方法,它的特殊性主要体现在如下的几个方面:1、构造方法的方法名与类名相同。2、构造方法没有返回类型。3、构造方法的主要作用是完成对类对象的初始化工作。4、构造方法不能像一般方法那样用“对象 .”显式地直接调用。(而是在创建新对象的同时,系统自动调用该类的构造方法为新对象初始化。)2005-10-1024一个类中可以定义多个构造方法吗?2005-10-1025生活中的方法重载类方法方法参数方法实现兰博司机 轿车 巴士 火车 驾驶启动、行驶、等待乘客上车、启动、行驶、到站停车、正点发车、行驶、到站停车、如果用代码实现,我们需要三个方法,这些方法的方法名称相同,参数类型不同

19、2005-10-1026方法重载已经是老朋友了。还记得第一天写的System.out.println()吗?public class Test public static void main(String args) int i = 0;char c = z;String str = hello;System.out.println(i);System.out.println(c);System.out.println(str);PrintStreamprintln(int)println(char)println(String)方法名相同,参数类型不同调用不同的println方法方法重载20

20、05-10-1027构造方法重载是方法重载的典型示例public class SofteemStudent4 private String name; / 学员姓名private String direction = “java”; / 所学方向public SofteemStudent4(String name) = name; /设定学员姓名public SofteemStudent4(String name, String direction) = name; /设定学员姓名this. direction = direction; /设定学员的所学

21、方向public String introduction() return “大家好!我是” + direction + “方向的 + name ;构造方法重载2005-10-1028通过调用不同的构造方法来表达对象的多种初始化行为例如:默认情况下,学员来学java,初始化时,只需提供学员姓名有时,需要提供所学方向及学员姓名public class SofteemStudent4Test public static void main(String args) SofteemStudent4 sstu = new SofteemStudent4 (“胡斐);System.out.println

22、(roduction();SofteemStudent4 sstu2 = new SofteemStudent4(“郭靖, “.net);System.out.println(roduction();大家好!我是java方向的胡斐大家好!我是.net方向的郭靖2005-10-1029构造方法的重载 一个类的若干个构造方法之间可以相互调用。当类中一个构造方法需要调用另一个构造方法时,可以使用关键字this,同时这个调用语句应该是该构造方法的第一个可执行语句。 使用this域来调用同类的其他构造方法,其优点是可以最大限度地提高对已有代码的利用程度,提高程序的抽象、

23、封装程度,以及减少程序维护的工作量。 2005-10-1030构造方法重载是方法重载的典型示例public class SofteemStudent4 private String name; / 学员姓名private String direction = “java”; / 所学方向public SofteemStudent4(String name) = name; /设定学员姓名public SofteemStudent4(String name, String direction) this(name); /设定学员姓名this. direction = dire

24、ction; /设定学员的所学方向public String introduction() return “大家好!我是” + direction + “方向的 + name ;构造方法重载2005-10-1031给定如下Java代码,请指出代码中的错误,并解释原因。public class Sample private int x;public Sample() x = 1;public Sample(int i) x = i;public int Sample(int i) x = i;return x+;private Sample(int i, String s)public Samp

25、le(String s,int i)private Sampla(int i)x=i+; private void Sampla(int i)x=i+; 无参构造方法带参构造方法不是构造方法带参构造方法带参构造方法名称与类名不相同不是构造方法2005-10-1032多态性 多态性是指同名的不同方法在程序中共存。即为同一个方法定义几个版本,运行时根据不同情况执行不同的版本。调用者只需使用同一个方法名,系统会根据不同情况,调用相应的不同方法,从而实现不同的功能。多态性又被称为“一个名字,多个方法”。2005-10-1033多态性的实现重载实现多态性(overload) 通过定义类中的多个同名的不同

26、方法来实现。编译时是根据参数(个数、类型、顺序)的不同来区分不同方法的。由于重载发生在同一个类中,不能再用类名来区分不同的方法了,所以在重载中采用的区分方法是使用不同的形式参数表,包括形式参数的个数不同、类型不同或顺序的不同。重载的方法和返回类型没有关系。(若只有返回类型不同则报错) 2005-10-1034例子MathLib.javapublic int add(int a, int b) return a + b;public int add(int b, int a) return b + a;public int add(double a, int b) return (int) a

27、+ b + 1;public int add(int b, double a) return b + (int) a + 1;public int add(int a, int b, int c) return a + b + c; public double add(double a, int b) return a + b; 2005-10-1035static关键字static关键字用来修饰变量、方法和内部类,称这些变量、方法和内部类为静态变量、静态方法和静态内部类static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为“类属性”或“类

28、方法”本质特点是:它们不属于任何一个类的具体对象。不保存在某个对象的内存区域中,而是保存在类的内存区域的公共存储单元。如果访问控制权限允许,可不必创建该类对象而直接使用类名加“.”调用static不可用于修饰构造器2005-10-1036例子MathLib.javapublic class MathLib /* 园周率 pi */public static double PI = 3.1415927;/* * 园面积,pi*r2 * param r * return */public static double circleArea(double r) return PI*r*r;2005-10-1037调用这个方法时,可以使用类名做前缀,也可以使用某一个具体的对象名;通常使用类名。非static的方法是属于某个对象的方法,在创建这个对象时,对象的方法在内存中拥有自己专用的代码段,而static的方法是属于整个类的,它在内存中的代码段是随着类的定义而装载,不被任何一个对象单独拥有;由于static方法是属于整个类的,所以它不能操纵和处理属于某个对象的成

温馨提示

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

评论

0/150

提交评论