您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > java李兴华学习笔记之面向对象(高级)01
北京MLDN软件实训中心联系电话:010-51283346第(1)页共(28)页E-Mail:mldnqa@163.com1、课程名称:面向对象(高级)2、知识点2.1、上次课程的主要知识点1、this关键字:·可以访问类中的属性;·调用方法,如果调用本类中其他构造的时候,一定要放在首行,且至少留有一个构造方法作为出口;·当前对象:表示当前正在调用类中方法的对象。2、static关键字:·static声明的属性是类变量,所有对象所共拥有,可以由类名称直接调用;·static声明方法,不能调用非static操作,可以由类名称直接调用。·主方法的组成:publicstaticvoidmain(Stringargs[])3、内部类:北京MLDN软件实训中心联系电话:010-51283346第(2)页共(28)页E-Mail:mldnqa@163.com·定义在一个类内部的类,被包含的类称为内部类,包含的类称为外部类。·内部类可以直接访问外部类中的私有操作,但是会破坏原有程序的结构。·内部类可以被static修饰,修饰之后的类成为外部类·要是在类外部进行实例化,使用外部类.内部类·如果没有被修饰,需要先实例化外部类对象,再实例化内部类对象·可以在一个方法中定义一个内部类,这个内部类可以直接访问外部类中的私有操作,如果要访问方法中的变量,这些变量需要使用final来修饰。2.2、题目讲解链表程序:完全就是引用传递及this关键字的使用。classLink{//这属于一个链表的操作类classNode{//每一个保存的数据都被封装在节点之中privateStringdata;//保存的数据,现在只是String类型privateNodenext;//保存下一个节点的引用publicNode(Stringdata){this.data=data;//通过构造传递具体的内容}publicvoidaddNode(NodenewNode){if(this.next==null){//当前节点的后面没有节点this.next=newNode;}else{this.next.addNode(newNode);}}publicvoidprintNode(){System.out.println(this.data);//输出当前节点的内容if(this.next!=null){//当前节点下还有节点this.next.printNode();}}publicbooleanexistsNode(Stringdata){//至少存在要查找的数据if(data.equals(this.data)){returntrue;}else{if(this.next!=null){returnthis.next.existsNode(data);}}returnfalse;}publicvoiddeleteNode(Nodeprevious,Stringdata){if(data.equals(this.data)){//满足,则要删除北京MLDN软件实训中心联系电话:010-51283346第(3)页共(28)页E-Mail:mldnqa@163.comprevious.next=this.next;//空出当前节点}else{if(this.next!=null){this.next.deleteNode(this,data);}}}};privateNoderoot;//设置根节点publicvoidadd(Stringdata){NodenewNode=newNode(data);if(this.root==null){//判断根节点是否为空this.root=newNode;//第一个节点为根节点}else{this.root.addNode(newNode);}}publicbooleanexists(Stringdata){//判断是否存在returnthis.root.existsNode(data);}publicvoiddelete(Stringdata){//删除节点if(this.exists(data)){//如果节点存在则删除if(data.equals(this.root.data)){this.root=this.root.next;//根节点后的下一个节点}else{this.root.next.deleteNode(this.root,data);}}}publicvoidprint(){//输出节点this.root.printNode();}};publicclassLinkDemo{publicstaticvoidmain(Stringargs[]){Linklink=newLink();link.add(A);link.add(B);link.add(C);link.add(D);link.add(E);link.delete(A);link.delete(B);link.print();北京MLDN软件实训中心联系电话:010-51283346第(4)页共(28)页E-Mail:mldnqa@163.com}};2.3、本次预计讲解的知识点1、程序的开发·最基本的核心就是普通类,也是在以后的开发中使用最多的·对于static属性而言,当类中的某个属性需要被所有对象所共同拥有的时候才会定义。·如果需要为对象实例化的时候可以考虑有构造方法·程序需要被封装·而且对于传递参数的命名最好要有意义,而且最好和类中的属性一一对应,那么就需要使用this.属性2、继承的基本概念及实现、继承的各个使用限制3、子类对象的实例化过程4、方法的覆写5、super和this关键字的作用6、final关键字的作用7、抽象类和接口的基本概念8、对象多态性3、具体内容3.1、继承(重点)继承性是面向对象的第二大特征,主要的作用是扩充已有类的功能。3.1.1、继承关系的引出例如:下面要定义两个类:Person、Student,按照最早的概念,则此时的两个类定义成如下形式:classPerson{privateStringname;privateintage;publicvoidsetName(Stringname){this.name=name;}publicvoidsetAge(intage){this.age=age;}publicStringgetName(){returnthis.name;}classStudent{privateStringname;privateintage;privateStringschool;publicvoidsetName(Stringname){this.name=name;}publicvoidsetAge(intage){this.age=age;}publicvoidsetSchool(Stringschool){this.school=school;北京MLDN软件实训中心联系电话:010-51283346第(5)页共(28)页E-Mail:mldnqa@163.compublicintgetAge(){returnthis.age;}};}publicStringgetName(){returnthis.name;}publicintgetAge(){returnthis.age;}publicStringgetSchool(){returnthis.school;}};从以上的代码很明显的可以发现,有大量的重复代码出现,而且通过实际的问题可以发现,学生本身就是一个人。面向对象开发的目的就是为了消除掉重复的代码,但是按照之前的编写套路很明显,已经不能满足于这种现实问题,所以下面就需要采用继承的形式,语法如下:class子类extends父类{}但是需要说明的是,有时候父类也称为超类(superclass),子类也称为派生类。classPerson{privateStringname;privateintage;publicvoidsetName(Stringname){this.name=name;}publicvoidsetAge(intage){this.age=age;}publicStringgetName(){returnthis.name;}publicintgetAge(){returnthis.age;}publicStringgetInfo(){return姓名:+this.name+,年龄:+this.age;}};classStudentextendsPerson{//现在没有编写任何代码};publicclassExtDemo02{publicstaticvoidmain(Stringargs[]){Studentstu=newStudent();stu.setName(张三);stu.setAge(20);System.out.println(stu.getInfo());}北京MLDN软件实训中心联系电话:010-51283346第(6)页共(28)页E-Mail:mldnqa@163.com};现在的Student类继承了Person类之后,发现可以将Person类中定义的方法任意的使用,子类也允许对父类中的定义进行扩充。classPerson{privateStringname;privateintage;publicvoidsetName(Stringname){this.name=name;}publicvoidsetAge(intage){this.age=age;}publicStringgetName(){returnthis.name;}publicintgetAge(){returnthis.age;}publicStringgetInfo(){return姓名:+this.name+,年龄:+this.age;}};classStudentextendsPerson{//现在没有编写任何代码privateStringschool;//扩充的属性publicvoidsetSchool(Stringschool){this.school=school;}publicStringgetSchool(){returnthis.school;}};publicclassExtDemo03{publicstaticvoidmain(Stringargs[]){Studentstu=newStudent();stu.setName(张三);stu.setAge(20);stu.setSchool(清华大学);//此方法为子类扩充System.out.println(stu.getInfo());System.out.println(学校:+stu.getSchool());}};从本程序中可以非常的清楚的发现,子类允许对父类进行扩充,所以,继承的基本作用就是扩充已有类的功能。北京MLDN软件实训中心联系电话:010-51283346第(7)页共(28)页E-Mail:mldnqa@163.com3.1.2、继承的限制1、子类可以继承父类的全部操作(属性、方法),但是对于所有的公共操作是可以直接继承的,而所有的私有操作是无法直接进程的,而是通过其他的方式间接访问。2、一个子类只能继承一个父类,属于单继承,而不能同时继承多个父类classA{};classB{};classCextendsA,B{};而以上的一个类同时继承属于多重继承,这个在java中是不允许出现的。3、在Java中允许多层继承。classA{};classBextendsA{};classCextendsB{};此时的C类将继承A和B类中的全部操作。3.1.3、子类对象的实例化从一个实际的问题可以发现,在日常生活中肯定是先有父亲,再有孩子。classPerson{privateStringname;privateintage;publicPerson(Stringname,intage){
本文标题:java李兴华学习笔记之面向对象(高级)01
链接地址:https://www.777doc.com/doc-5892628 .html