04面向对象程序设计进阶_第1页
04面向对象程序设计进阶_第2页
04面向对象程序设计进阶_第3页
04面向对象程序设计进阶_第4页
04面向对象程序设计进阶_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

1、面向对象程序设计(上)ID:SCSJ001-Java Basic Syntax面向对象程序设计(上)类的继承访问控制(public/protected/private)方法覆盖(重写)重载2类的继承面向对象最重要的特点之一,就是可以实现对类的复用通过“继承”一个现有的类,可以使用已经定义的类中的方法和变量。类的方法可以被继承,但是类的构造器不能被继承。3类的继承(con.)类继承的基本语法: class extends *在Java中,一个类只能继承一个父类,这种方式叫做单继承。这一点和C+不一样。4类的继承(con.)java.lang.Object类是所有类的父类虽然一个类只可以继承一个父

2、类,但是一个父类却可以被多个子类所继承。从子类的角度看,它是“继承(extends)”父类;而从父类的角度看,它是“派生(derive)”子类。它们指的都是同一个动作,只是角度不同而已。5类的继承例子public class Animalprotected int weight;public int getWeight()return weight;public void setWeight(int w)weight=w;public class Dog extends Animal /* *子类新增方法 */ public void bark() System.out.println(Wan

3、gWang); 6类的继承例子(con.)public class MyDogpublic static void main(String args)Dog myDog = new Dog();myDog.setWeight(50);System.out.printf(My Dogs Weight is %f“, myDog.getWeight();myDog.bark();7toString()方法在Object类中,定义了一个toString()方法,用于返回一个表示这个对象的字符串覆盖该方法能用来提供某对象的自定义信息简单类型使用它们的封装类,可转换成String8访问控制在Java中,

4、可以在类、类的属性以及类的方法前面加上一个修饰符(modifier),来对类进行一些访问上的控制。修饰符同一个类中同一个包中子类中全局privateYesdefaultYesYesprotectedYesYesYespublicYesYesYesYes9访问控制(con.)访问控制的限制程度从高到低如下图所示。注意,Default不是一个修饰符,它只是用来表示一种不加任何修饰符时的状态。 当前类 当前包 子类 全局privateDefaultprotectedpublic10方法的覆盖(override)当子类继承父类时,可以从父类继承它的protected和public属性和方法。如果从父类

5、继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。当对父类的方法进行覆盖时,子类中的方法必须和父类中对应的方法具有相同的方法名称、输入参数和返回值。子类中的覆盖方法不能使用比父类中被覆盖方法更严格的访问权限。11方法的覆盖例子public class PersonString name;int age;String sex;public String showName()return name;12方法的覆盖例子(con.)public class Teacher extends Personprivate String departm

6、ent;public void setDepartment(String dept)department = dept;public String getDepartment()return department;/方法覆盖public String showName()return name+老师;13方法的重载当类中的方法名相同时,称为方法的重载(overload)例如:public void println(int i);public void println(char c);public void println(String s);14构造器的重载(案例6-5)除了方法外,类的构造器

7、也可以实现重载类的构造器可以相互调用,调用方式是使用this关键字来实现15作业有工人,农民,教师,科学家,服务生,其中,工人,农民,服务生只有基本工资.教师除基本工资外,还有课酬(元/天),科学家除基本工资外,还有年终奖,请你写出相关类,将各种类型的员工的全年工资打印出来;完成一个打印类,要求能用同名方法打印不同的类型的输入参数;write(int s);write(float s);write(String s);16面向对象程序设计进阶(下)ID:SCSJ001-Java Basic Syntax17面向对象程序设计进阶super关键字this关键字封装类=和equals()toStri

8、ng()18super 关键字在Java类中使用super来引用父类的成分super可用于访问父类中定义的属性super可用于调用父类中定义的成员方法super可用于在子类构造器中调用父类的构造器super的追溯不仅于直接父类,直到Object类19调用父类构造器在子类的构造器中可使用语句super(argument_list) 调用父类的构造器如果子类的构造器中没有显式地调用父类构造器,也没有使用this关键字调用重载的其它构造器,则系统默认调用父类无参数的构造器如果子类构造器中既未显式调用父类构造器,而父类中又没有无参的构造器,则编译出错20super关键字例子public class P

9、ersonprivate String name;private int age;private String sex;public String showName() return name;public class Teacher extends Person/方法覆盖public String showName()return super.showName()+老师;21thisJava中为解决变量的命名冲突和不确定性问题,引入关键字“this”代表其所在方法的当前对象。构造器中指该构造器所创建的新对象 方法中指调用该方法的对象this关键字的用法在类本身的方法或构造器中引用该类的实例变

10、量和方法(案例6-6)将当前对象作为参数传递给其它方法或构造器(案例6-7)用来调用其他的重载的构造器(案例6-8)22对象的构造和初始化分析内存分配,缺省的初始化进行实例变量的初始化如下递归的进行1. 设置实例变量的值为缺省的初始值 2. 调用对象的构造器 ,绑定构造器参数。3. 如果构造器中有this()调用,则根据this()调用的参数调用相应的重载构造器,然后,转到步骤5;否则转到步骤4。4. 除java.lang.Object类外,调用父类的中的初始化块初始化父类的属性,然后调用父类构造器,如果在构造器中有super()调用,则根据super()中的参数调用父类中相应的构造器。5.

11、使用初始化程序和初始化块初始化成员。6. 执行构造器方法体中其他语句。23初始化块它指的是前面章节所属的“游离块”(1)不管使用哪个构造器创建对象,它都会被首先运行,(2)然后才是构造器的主体部分被执行 24对象初始化示例父类Person,子类Teacher初始化的三种情形调用父类的默认构造器构造器中使用了this()调用本类中重载的构造器构造器中使用了super()调用父类的构造器25封装类对于简单类型数据,Java对它们进行了封装,使它们都有相应的封装类简单数据类型封装类 boolean Boolean byte Byte short Short int Integer long Long

12、 char Character float Float double Double26Integer的方法byte byteValue() 以 byte 类型返回该 Integer 的值。 double doubleValue()以 double 类型返回该 Integer 的值。 float floatValue() 以 float 类型返回该 Integer 的值。 int intValue() 以 int 类型返回该 Integer 的值。 long longValue() 以 long 类型返回该 Integer 的值。 short shortValue() 以 short 类型返回该

13、 Integer 的值。String toString() 返回一个表示该 Integer 值的 String 对象。 static int bitCount(int i) 返回指定 int 值的二进制补码表示形式的 1 位的数量。 static int parseInt(String s) 将字符串参数作为有符号的十进制整数进行解析。 static int parseInt(String s, int radix) 使用第二个参数指定的基数,将字符串参数解析为有符号的整数。27Integer的方法static String toBinaryString(int i) 以二进制(基数 2)无符

14、号整数形式返回一个整数参数的字符串表示形式。 static String toHexString(int i) 以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。 static String toOctalString(int i) 以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。 static String toString(int i) 返回一个表示指定整数的 String 对象。 static String toString(int i, int radix) 返回用第二个参数指定基数表示的第一个参数的字符串表示形式。 static Intege

15、r valueOf(int i)返回一个表示指定的 int 值的 Integer 实例。 static Integer valueOf(String s)返回保存指定的 String 的值的 Integer 对象。 static Integer valueOf(String s, int radix) 返回一个 Integer 对象,该对象中保存了用第二个参数提供的基数进行解析时从指定的 String 中提取的值。 28封装类的例子public class WrapperClasspublic static void main(String args)Integer i = new Integ

16、er(10);Integer j = new Integer(10);System.out.println(i=j); /封装类转化简单类型。int k = Value(); int l = i;29封装类例子(con.)1010ij30= 和 equals()=和equals()都是用于相等型判断的操作符= 操作符用来判断两个引用是否指的同一个对象,或者两个简单类型的值是否相等equals()方法用来判断对象的内容是否相等,相等的条件在该类中定义Object类的equals()方法直接用=实现31覆盖默认的equals()在Object类中的equals()方法直接使用=实现,不实用覆盖默认

17、的equals()方法按照自己的需要,在equals()方法中定义对象相等的含义32String类ID:SCSJ001-Java Basic Syntax33 String类String对象代表一组不可改变的Unicode字符序列它的方法可用来创造新的字符串:concat、replace、substring、toLowerCase、toUpperCase和trim。查找字符的方法:endWith、startWith、 indexOf、 lastIndexOf。比较字符的方法:equals、equalsIgnoreCase、compareTo。其它:charAt、length, format,

18、getBytes34String对象的创建法一:String s = new String(“This is a string”);法二:String s = “This is a string”;35String对象创建String s1 = “abc”;String s2 = new String(s1);String s3 = new String(“abc”);String s4 = “abc”;s1=s4 : trues2=s3 : falses1=s2 : falses3=s4 : false“abc”s1s3s4s2“abc”“abc”栈堆36内存地址的变化String a =

19、new String(abc);String b = a;a = new String(123);System.out.println(b);/results:abc , why?b:0 x34877654a:0 x34877654“abc”“123”栈堆a:0 xff8776540 x348776540 xff87765437StringBuffer/StringBuilder类StringBuffer对象代表一组可改变的Unicode字符序列构建器:StringBuffer() 创建一个空的字符缓冲,长度为16个字符容量;StringBuffer(int capacity) 用指定的初始容

20、量创建一个空的字符缓冲;StringBuffer(String initString) 创建包含initString的字符缓冲,并加上16个字符的备用空间。缓冲的修改操作:append、insert、reverse、setCharAt、setLength。38分析字符串相加的速度/字符串相加方法一:long start = System.currentTimeMillis();String s = ;for(int i = 0; i 10000; i+) s = s + i;System.out.println(System.currentTimeMillis() - start);/字符串相

21、加方法二:long start = System.currentTimeMillis();StringBuilder sb = new StringBuilder();for(int i = 0; i 10000; i+) sb.append(i);System.out.println(System.currentTimeMillis() - start);39StringUtils类(开源类,选学)Apache项目下的开源项目,commons-lang-x.x.jarStringUtils中方法的操作对象是java.lang.String类型的对象,是JDK提供的String类型操作方法的补

22、充 ,除了构造器,StringUtils中一共有130多个方法,并且都是static的 .40StringUtils.isEmptypublic static boolean isEmpty(String str) 判断某字符串是否为空,为空的标准是str = null 或 str.length() = 0 下面是示例: StringUtils.isEmpty(null) = true StringUtils.isEmpty() = true StringUtils.isEmpty( ) = false StringUtils.isEmpty( ) = false StringUtils.is

23、Empty(bob) = false StringUtils.isEmpty( bob ) = false 41StringUtils.isNotEmptypublic static boolean isNotEmpty(String str) 判断某字符串是否非空,等于!isEmpty(String str),下面是示例: StringUtils.isNotEmpty(null) = false StringUtils.isNotEmpty() = false StringUtils.isNotEmpty( ) = true StringUtils.isNotEmpty( ) = true

24、StringUtils.isNotEmpty(bob) = true StringUtils.isNotEmpty( bob ) = true 42StringUtils.isBlank/isNotBlankpublic static boolean isBlank(String str) 判断某字符串是否为空或长度为0或由空白符(whitespace)构成 ,下面是示例: StringUtils.isBlank(null) = true StringUtils.isBlank() = true StringUtils.isBlank( ) = true StringUtils.isBlank

25、( ) = true StringUtils.isBlank(t n f r) = true StringUtils.isBlank(b) = false StringUtils.isBlank(bob) = false StringUtils.isBlank( bob ) = false 43StringUtils.trimpublic static String trim(String str) 去掉字符串两端的控制符(control characters, char = 32) 如果输入为null则返回null ,下面是示例: StringUtils.trim(null) = null StringUtils.trim() = StringUtils.trim( ) = StringUtils.trim( b t n f r ) = StringUtils.trim( ntss b) = ss StringUtils.trim( d d dd ) = d d dd StringUtils.trim(dd ) = dd StringUtils.trim( dd ) = d

温馨提示

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

评论

0/150

提交评论