您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > 第02讲 面向对象程序设计(一)
第02讲面向对象程序设计(一)主讲:杨世顺本章内容•类和对象•static•方法与方法重载•继承•方法重写•final•包•访问权限修饰符•String类•Object基类关于类的一个问题•如何描述一个事物?比如人,汽车等。•如果我们要描述一个人,就无法用基本数据类型去表示了,我们希望Java能提供“人”这个类型(如:Person),以便于我们能这样去创建一个“人”类型的变量:Personp=?;初识类与对象•Java提供了构造“人”这种类型的方式classPerson{}•创建“人”类型的“变量”Personperson1;Personperson2=newPerson();•Person是类的名称,习惯上用大写字母开头。•person1和person2分别是该类的引用,指向Person类的对象。类的属性•所有的人都有姓名、年龄、性别这些属性,我们可以在“人”这个类中添加这些属性。classPerson{Stringname;//姓名intage;//年龄charsex;//性别}属性初始值•可以在创建类时直接给属性赋一个初始值。classPerson{Stringname=“张三”;//姓名intage=18;//年龄charsex=‘男’;//性别}•如果不给属性赋初值,则int型初始值为0,float和double型初始值为0.0,char型初始值为ascii码为0的字符,数组初始值为null,对象初始值为null,boolean型初始值为false。属性调用•可以通过“对象.属性名”的方式给属性赋值或取得属性的值。Personperson1=newPerson();person1.name=“张三”;person1.age=20;person1.sex=‘女’;Personperson2=newPerson();person2.name=“李四”;person2.age=22;person2.sex=‘男’;类的方法•Java中的方法和其它编程语言中成员函数的概念相同。•向Person类中添加两个方法。classPerson{voidrename(StringnewName){name=newName;}voidshowInfo(){System.out.println(“姓名:”+name+“年龄:”+age+“性别:”+sex);}}方法调用•可以通过“对象.方法名(实际参数)”的方式调用类的方法。Personperson1=newPerson();person1.rename(“李四”);person1.showInfo();默认构造方法•每个类都有一个默认的构造方法。•默认的构造方法名和类名相同,没有参数,没有返回值。Person(){}使用默认构造方法为属性赋初值classPerson{Stringname;intage;charsex;Person(){name=“李四”;age=22;sex=‘男’;}}含参数的构造方法•除默认构造方法外,还可以使用带参数的构造方法为属性赋初始值。Person(StringpName,intpAge,charpSex){name=pName;age=pAge;sex=pSex;}•通过带参数的构造方法创建类的实例。Personperson1=newPerson(“张三”,20,‘女’);Personperson2=newPerson(“李四”,22,‘男’);•当类中含有带参数的构造方法,且要调用默认的构造方法时,必须显式地写上默认的构造方法。this关键字•可将以上带参数的构造方法改为:Person(Stringname,intage,charsex){this.name=name;this.age=age;this.sex=sex;}•this表示当前对象本身。构造方法相互调用•在一个构造方法中调用另一个构造方法:Person(){this(“张三”,20,‘女’);}示例•创建3个学生对象,将其放在数组中,并做循环打印出每个学生的信息。•创建若干个学生对象,按班级分类放在二维数组中,并做循环打印出每个学生的信息。代码块classPerson{Stringname;intage;charsex;{name=“张三”;age=20;sex=‘女’;}}static•static可以修饰类的属性和方法。•用static修饰的属性和方法不属于该类的任何一个对象,而属于该类所有对象所共有。•如果intid为static修饰的,那么通过以下方式调用id:Person.id=1;•如果voideat()方法是static修饰的,那么通过以下方式调用eat()方法:Person.eat();static代码块•同代码块的用法一样,只是在代码块前面加上static关键字,如:static{this.id=1;}代码块与构造方法的优先级•Person类有一个属性age,在代码块中赋值为20,构造方法中赋值为30,那么在调用时读取的age是20还是30呢?或者说代码块和构造方法谁先执行?•答案是age=30。方法重载•方法重载是指在一个类中存在多个名称相同,但参数个数或参数类型不相同的方法。方法的返回值和修饰符可以相同,也可以不同。intmax(intx,inty)doublemax(doublex,doubley)intmax(intx,inty,intz)小结类的封装•类是构造对象的模板,由类构造对象的过程称为创建类的实例。•类可以看作是一种特殊的数据类型,也可以看作是对数据和动作(属性和方法)的封装。•可以通过类的属性赋初值、(静态)代码块、含参数的构造方法、对象赋值的方式为对象属性赋值。•当类中有含参数的构造方法,且要调用默认构造方法时,必须写上默认的构造方法。•this表示当前对象。•static修饰的属性或方法不属于该类的任何对象,而由该类的所有对象所共有。•方法重载是指在一个类中存在多个名称相同,但参数个数或参数类型不相同的方法。方法的返回值和修饰符可以相同,也可以不同。员工类•我们构造一个员工类Employee,而员工类里也有姓名、年龄、性别,同时还增加了work()方法。classEmployee{Stringname;//姓名intage;//年龄charsex;//性别StringempNo;//员工号voidwork(){System.out.println(“我的工作是编程。”);}}类的继承•我们注意到Employee中拥有Person中的绝大多数属性和方法,而员工本身也是属于“人”的,所以我们可以使用extends关键字的继承方式来构造Employee类。classEmployeeextendsPerson{StringempNo;voidwork(){System.out.println(“我的工作是编程。”);}}•我们称Person为父类(基类),Employee为子类(派生类)。•子类自动拥有父类的全部属性和方法。子类构造方法的调用•使用子类默认构造方法生成实例时,会自动调用父类的默认构造方法。•使用子类带参数的构造方法生成实例时,不会自动调用父类的构造方法,除非在子类的构造方法中显示调用父类的构造方法。子类调用父类的属性和方法•父类Person中有一个showInfo()方法,子类可以调用父类的showInfo()方法。Employeeemp=newEmployee();emp.showInfo();•子类调用父类的属性。emp.age;方法重写(override)•方法重写也叫方法覆盖,是指子类拥有和父类名称相同、参数类型和数量也相同的方法。也称子类重写了父类的方法。•父类和子类都有一个work()方法,有以下几种情况://调用父类方法Personperson=newPerson();person.work();//子类没有则调用父类方法,子类有则调用子类方法。Personperson=newEmployee();person.work();//调用子类方法Employeeemployee=newEmployee();employee.work();super关键字•super表示父类的引用,可以这么理解,但并不准确。super只是指示编译器调用超类方法的关键字。•使用super调用父类构造方法://调用父类默认构造方法super();//调用父类带参数的构造方法super(“张三”,20,‘女’);•使用super调用父类方法:super.work();final•final用来修饰属性、方法、参数和类。•final属性是不可修改的,表示常量。•final方法是不可被子类重写的。•final参数在方法体内是不可被修改的。doublecircleArea(finaldoublepi,doubler){r=r+1;//正确pi=3.15;//错误……}•final类是不能被继承的。包•项目是由若干功能不同的类组成的,包是管理类的一种方式,类似文件夹,可以将功能相似的类放在一个包中。•包在类文件的首行声明:packagecom.bestinfo;•编译、运行带包的类文件方式:javaccom/bestinfo/Employee.javajavacom.bestinfo.Employee访问权限修饰符•访问权限修饰符有4个:publicdefaultprotectedprivate•不带任何访问权限修饰符则表示default。修饰符使用原则•通常,将类设为public,用其它修饰符的情况很少。•通常,将类的属性设为private,将类的方法设为public。•private属性在类的内部使用,如果需要在外部访问或修改private属性,应该使用getter和setter方法。访问权限修饰符的作用域内部子类其它类同包不同包同包不同包public是是是是是default是是否是否protected是是否是否private是否否否否main方法•main方法的的修饰符为publicstatic,表示是公有的、静态的方法,也就是任何类中都可以使用,但不属于任何类的对象。•main方法的返回值是void,返回值是void并不等于没有返回值,只有构造方法没有返回值。•String[]args是main方法的参数,是一个字符串数组,用于接收命令行参数。String构造方法String()构造一个空字符序列的字符串。String(byte[]bytes)String(byte[]bytes,intoffset,intlength)构造一个使用平台的默认字符集解码字节的指定数组构造字符串,offset是字节数组起始位置,length表示取offset开始的元素个数。String(char[]value)String(char[]value,intoffset,intlength)String(Stringoriginal)用字符数组或字符串去构造一个字符串。String方法intlength()返回字符串长度,即字符的个数。charcharAt(intindex)返回指定索引处的char值。intcompareTo(StringanotherString)比较两个字符串,返回值为-1、0和1。intcompareToIgnoreCase(StringanotherString)比较两个字符串(忽略大小写),返回值为-1、0和1。Stringconcat(Stringstr)和另一个字符串连接,返回连接后的字符串,也可以使用“+”。booleancontains(CharSequences)当字符串中包括指定的字符序列时返回true,否则返回false。booleancontentEquals(CharSequencecs)当字符串和指定的字符序列相等时返回true,否则返回false。booleanequals(ObjectanotherObject)booleanequalsIgnoreCase(ObjectanotherObject)判断字符串是
本文标题:第02讲 面向对象程序设计(一)
链接地址:https://www.777doc.com/doc-3351615 .html