您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > JAVA面向对象编程②
Java继承1。超类变量可以引用子类对象(比如people=student),但是超类变量只能访问自己的成员,而不能访问子类中有但超类没有的成员。比如有类:publicclassPeople{Stringp_name;}publicclassStudentextendsPeople{intstu_id;}运行(留意注释的部分)publicstaticvoidmain(String[]args){Peoplepeople=newPeople();Studentstudent=newStudent();people=student;//student=people;//超类变量可以引用子类对象,但反之不行System.out.println(people.p_name);//System.out.println(people.stu_id);//超类变量只能访问自己的成员,而不能访问子类中有但超类没有的成员}2。super:用来调用(最近的)超类的构造函数(永远写在第一行)或访问被一个子类成员的隐藏的超类成员(在子类中定义与超类同名的变量(方法)导致超类的该名的变量(方法)被隐藏)3。继承中的构造函数调用顺序:按派生顺序,从超类到子类。(子类的构造函数中没有出现super()时,超类的构造函数同样会被调用,只是默认调用无参的构造函数罢了)4。overloading(重载)是多个函数名相同,参数类型不同;overriding(覆盖)是继承中的子类的方法是超类方法的版本被隐藏。overriding要求超类子类方法的名称、参数相同,否则就是overloading了。另外,返回类型也必须相同,不然是不允许覆盖(overriding)的。5。动态方法分配(覆盖:多态支持,类似C中的虚函数):当通过一个超类引用调用一个被覆盖的方法时,java基于在调用出现时被引用的对象类型来决定执行哪个版本的方法。换句话说,是被引用的对象类型决定将执行哪个版本的覆盖方法。如:People有方法setName,Student类中覆盖了这个方法。那么:Students=newStudent();Peoplep=s;p.setName(name);上面的程序中,p引用调用了一个被覆盖的方法setName,由于Student才是被引用的对象类型,所以这里会调用Student的setName方法。6。抽象类:能创建对象(类似声明),但不能实例化。与覆盖结合,保证某个超类的所有子类都覆盖了一个必须覆盖的方法。7。final:1、用来创建(类似的)常量2、用于方法,用来防止覆盖(与abstract的必须覆盖对应)3、用于类,防止继承(所以把类同是声明为abstract和final是不合法的)8。Object:所有类的超类。注意equals方法,用来比较对象的内容,相等就返回true。java复习第三天1、面向对象的思想anythingisanObject(万物皆对象)符合人们客观看待世界的规律2、抽象,从对具体的对象中抽取有用信息。对象有其固有属性,对象的方法,即对象的行为(对象能做什么)对象本身是简单的(功能简单),多个对象可以组成复杂的系统(对象之间彼此调用对方的方法)3、面向对象的优点1)对象应当是各司其职(功能简单),各尽所能(把自己的功能作到最好)。(弱耦合性实现了前面所述的对象的特点)2)对象的耦合性,是对象之间的联系,对象和系统之间的联系。对象的耦合性要尽量的弱,也就是对象之间的联系尽可能的弱,对象和系统之间的联系尽可能的弱。弱耦合性要通过一个标准来实现3)可重用性对象的功能越简单,复用性就越好。(对象的耦合性弱,复用性就比较强)4)可扩展性系统的可插入性,是在系统中加入新的对象之后的系统稳定性。对象的可替换性,是在系统中替换原有的对象之后的系统的稳定性。4、面向过程和面向对象的比较面向过程是先有算法,后又数据结构---(怎么解决问题)面向对象是先有对象(数据结构),后有算法(对象间的方法调用)---(用什么做)5、类的定义1)属性类型变量名;--实例变量,系统赋初始值默认值使用范围命名冲突实例变量系统赋初始值在类的内部使用允许实例变量和局部变量发生命名冲突,变量的值-局部优先局部变量先赋值后使用定义他的代码块同范围内不允许两个局部变量发生命名冲突2)方法的定义:不允许方法的声明和实现分开方法声明的组成:(a)方法的修饰符(0或多个修饰符出现的顺序无关)|(b)方法的返回值类型|顺(c)方法名|序(d)方法的参数表|向(e)方法中允许抛出的异常|下V6、方法的重载java中方法的重载(overload)方法名相同,参数表不同(个数,类型,排列顺序),其他部分可以不同。调用时要给出明确参数并确定调用某一方法。在编译时,编译器会根据参数选择适当的方法,所以重载也叫编译时多态。**方法的重载可以屏蔽一个对象同一类方法由于参数不同所造成的差异**向上就近匹配原则如果方法的参数表中的数据类型和调用时给出的参数类型不尽相同时会根据向上匹配的就近原则。(类型就近向上转化匹配)publicvoidm(bytea,shortb){System.out.println(m(byte,short));}publicvoidm(shorta,byteb){System.out.println(m(short,byte));}此时若用2个byte作为参数调用m()方法,编译会出错,因为按照向上就近匹配原则,提升哪个都可以,出现语义不明确的错误7、构造方法1)方法名与类名相同,无返回值2)系统提供默认无参的,空的构造方法3)若自定义一个有参的构造方法,则系统将不提供无参的,空的构造方法不能手工调用,在一个对象的生命周期中,只会被调用一次8、对象的创建Java在堆中创建对象的过程:1)分配空间2)初始化属性,若声明实例变量的时候没有初始化,用默认值初始化属性3)调用某个构造方法(前提:不考虑继承关系)Students;//声明一个Student类的对象变量s=newStudent();//调用Student类的无参的构造方法,创建一个对象,把这个对象的地址赋给一个Student类的引用(引用指向了这个对象,引用中保存对象的首地址,以后都是通过引用访问这个对象的属性和方法)s.ages引用所指向的对象的age属性9、变量包括简单变量(原始数据类型),对象变量。简单变量传值,对象变量传址!staticvoidmethod3(Students){s=newStudent();//创建一个新对象,把对象的地址赋给形参的引用s.age=20;//改变新对象的状态}Studentstu=newStudent();System.out.println(stu.age);//打印出Student类的age属性的初始值method3(stu);//method3方法返回,形参s指向的被改变的对象已经成为了垃圾对象System.out.println(stu.age);//打印的仍是原来那个对象的age的值10、this是一个引用,指向的是自己,即当前对象(哪个对象调用了方法,哪个对象就是当前对象)可以用来区分实例变量和局部变量。this.age=age;this(),他表示调用本类其他的构造方法,注,只能写在构造方法的第一行。项目练习:项目名称:BankAccountManagementSystem银行账户管理系统简称BAM项目描述:这是一个基于C/S结构的银行账户在线管理系统,用户可以通过ATM终端界面来操作自己的银行账户.项目实施方式:这是一个同步练习,随着达内CoreJava课程的深入,这个项目将趋于完整,学员的任务是随着知识点的深入,完成每一个进阶的项目要求.练习1:(面向对象基础语法)写一个账户类(Account)属性:id:账户号码长整数password:账户密码Stringname:真实姓名StringpersonId:身份证号码Stringemail:客户的电子邮箱Stringbalance:账户余额double方法:deposit:存款方法,参数是double型的金额withdraw:取款方法,参数是double型的金额构造方法:有参和无参,有参构造方法用于设置必要的属性很重要的java总结JAVA的面向对象编程--------课堂笔记11.28面向对象主要针对面向过程。面向过程的基本单元是函数。什么是对象:EVERYTHINGISOBJECT(万物皆对象)所有的事物都有两个方面:有什么(属性):用来描述对象。能够做什么(方法):告诉外界对象有那些功能。后者以前者为基础。大的对象的属性也可以是一个对象。为什么要使用面向对象:首先,面向对象符合人类看待事物的一般规律。对象的方法的实现细节是屏蔽的,只有对象方法的实现者了解细节。方法的定义非常重要。方法有参数,也可能有返回值。注意区分:对象(本身)、对象的实现者、对象的调用者。分析对象主要从方法开始。我们通过类来看待对象,类是对象的抽象。其次,采用面向对象方法可以使系统各部分各司其职、各尽所能。对象之间的耦合性一定要低(比如不同硬盘和不同主板之间的关系)。这样才能使每个对象本身做成最好的。对于对象的要求:高内聚、低耦合,这样容易拼装成为一个系统。实现高内聚就是要最大限度低提高复用性(复用性好是因为高内聚)。可复用性是OOP的基础。比较面向过程的思想和面向对象的思想:面向过程的思想:由过程、步骤、函数组成,以过程为核心;面向对象的思想:以对象为中心,先开发类,得到对象,通过对象之间相互通信实现功能。面向过程是先有算法,后有数据结构。面向对象是先有数据结构,然后再有算法。在用面向对象思想开发的过程中,可以复用对象就进行复用,如无法进行复用则开发新的对象。开发过程是用对个简单的对象的多个简单的方法,来实现复杂的功能。从语法上来看,一个类是一个新的数据类型。在面向对象编程中,除了简单数据类型,就是对象类型。定义类的格式:classStudent{代码}注意类名中单词的首字母大写。实例变量:定义在类中但在任何方法之外。(New出来的均有初值)局部变量:定义在方法之中的变量。局部变量要先赋值,再进行运算,而实例变量均已经赋初值。这是局部变量和实例变量的一大区别。实例变量的对象赋值为null。局部变量不允许范围内定义两个同名变量。实例变量的作用域在本类中完全有效,当被其他的类调用的时候也可能有效。实例变量和局部变量允许命名冲突。书写方法的格式:修饰符返回值方法名调用过程中方法体可能出现的例外publicint/voidaddNumber(参数)throwExcepion{}例:publicintaddNumber(inta,intb){}注:方法名中的参数inta,intb为局部变量类方法中的一类特殊方法:构造方法。构造方法是当用类生成对象时,系统在生成对象的过程中利用的方法。注意:构造方法在生成对象的时候会被调用,但并不是构造方法生成了对象。构造方法没有返回值。格式为:public方法名。构造方法的方法名与类名相同。构造方法是在对象生成的过程中自动调用,不可能利用指令去调用。在一个对象的生成周期中构造方法只用一次,一旦这个对象生成,那么这个构造方法失效。用类来生成对象的语句:Students=newStudent()。第一个Student表示这是用Student类进行定义。“Student()”表示调用一个无参数的构造方法。如果()中有参数,则系统构造对象的过程中调用有参的方法。此时S称为一个对象变量。Students的存储区域存放的是地址:一个对象在硬盘上占有一个连续地址,首地址赋予s空间。S称为对象Student的引用。注意:在对象变量中存放的是引用(地址);在简单变量中存放的是数值。可以构造多个构造方法,但多个构造方法的参数表一定不同,参数顺序不同即属于不同的构造方法:publicstudent(stringname,inta){}publicstudent(inta,stringname){}为两个不同的构造方法。如果我们未
本文标题:JAVA面向对象编程②
链接地址:https://www.777doc.com/doc-6288823 .html