JAVA面向对象的感悟_第1页
JAVA面向对象的感悟_第2页
JAVA面向对象的感悟_第3页
JAVA面向对象的感悟_第4页
JAVA面向对象的感悟_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

面向对象(java中的设计模式)知识点1面向对象初步java是完全面向对象的编程语言1)什么是Object(对象「Object:本意:东西,是指具体事务的实例(东西)面向对象:就是面向客观事物之间的联系"想着对象写代码”2)面向对象的几个关键概念:类:指一类事物,eg车,人,花对象:指的事物的一个具体实例,一个对象,eg刘老师的那辆结婚的大28自行车,门口的那颗向日葵多态:事物在不同的情况下有不同的变化eg美女一〉刘诗诗/高圆圆/杨玉环/苍井空花钱,花心,花费,花朵打人,打卡,打酱油,打车,打假封装:任何对象实例都尽量封装继承:概念的继承关系抽象:2类与对象关系1)类:用来描述事物类型,指的一类事物,eg人类,车类,植物类2)对象:就用来描述事物的一个实例,一个对象eg刘苍松/刘英谦/杨嘉,刘老师的那辆结婚的大28自行车3)类与对象的联系和区别:类代表是一类事物,是对象的模板对象代表是一个事物的实例,是类的一个实现3类的组成1)类现实中:类{特征;行为;)2)java中的类:特征属性:变量行为:方法class类名{属性方法案例:objectl.Demol/PersonclassPerson{属性(变量):姓名,年龄,性别〃数据类型属性名Stringname;intage;Stringsex;方法返回值类型(void)方法名(形参列表){方法体4创建对象1)创建对象的格式:a)对象的声明:・ 变量的定义:数据类型变量名b)对象的创建:对象名=new构造方法2)访问对象中的属性/方法a)访问属性:对象名.属性名b)访问方法:对象名.方法名3)对象属性的默认值:对象当new以后,在堆当中创建存储空间里,jdk会自动初始匕一般基本类型数据是"0",引用类型默认就是null5引用类型变量以及对象在内存中创建的过程l)java中的内存管理与分配栈:就是java中一块使用的内存区域,使用的方式:先进后出/后进先出栈:存储局部变量堆:也是Java中一块使用的内存区域,使用的方法:随机的分配堆:一般new的对象2)变量的类型变量分为:基本类型和引用类型基本类型:在内存中占用空间,就是基本数据类型的大小,值就是基本数据类型的值引用类型:引用类型的值,就是在堆当中new生成对象的地址值,可以通过引用类型中的地址值找到在堆当中的对象6案例:objectl.Demo2Box/Box长方体类:Box,属性:长(length),宽(width),高(height)方法:求体积(volume)(长*宽*高)根据Box来创建一个Box对象,并求其体积7构造方法(构造器)1)作用:用来描述对象的创建过程(就是用来创建对象,给属性赋初始值,或者做其他的初始化操作)eg:月饼制作(构造方法)月饼的模板 >月饼(对象)馅(参数)2)jave中的构造方法:在类当中声明,方法名跟类名一致,而且构造方法没有返回值,没有返回值类型当创建对象的时候,就立刻调用构造方法,来给对象初始化egclassStudent{intage;Stringname;publicStudent(intage,Stringname){this.age=age;=name;)}3)对象的实例化过程new:在堆当中创建对象的过程a)根据类的属性在堆当中分配存储对象的空间,并且先自动给这些属性赋默认值b)根据参数来调用构造方法(把默认值变成对象要赋的值)c)new返回的是对象的堆当中引用地址4)this关键字:this:当前,指代当前对象(对当前对象的引用)a)企业开发当中,构造方法的参数的名字跟属性名最好一致,需要是用this来区分this.属性名〃当前这个对象的属性this.方法名〃当前这个对象的方法this(参数):跟构造方法重载结合使用,可以调用本类中其他的构造方法,必须要写到当前构造方法中的第1行参数:要跟调用的构造方法的参数相匹配5)构造方法重载(参数不同的构造方法)一个类当中很多个构造方法,根据参数的不同,来选择调用不同的构造方法案例:objectl.Car/Demo3Car设计Car类,属性:name,color,money,speed方法:行驶写两个构造方法,第1个构造方法,要把所有的属性都初始化,第2个构造构造方法,只把name/color初始化6)默认的构造方法:a)java类当中必须要有构造方法b)当new的是必然会调用构造方法c)如果类当中没有写任何构造方法的话,则系统会默认的给我们创建一个空参的构造方法如果我们写了构造方法,则会覆盖系统默认提供的构造方案例:objectl.Demo4class类名{属性构造方法方法}案例:objectl.Demo5Point/Point在平面绘图坐标系中的一个点PointPoint:属性:x,y构造方法:1)一般的点(x,y)2)对角线的点(x)-->this(x,y)方法:1)当前点到原点的距离2)当前点到另外一个点的距离8)方法重载:1)方法重载a)方法名字必须一样b)方法的参数不同(参数的类型或个数)2)方法签名的概念:方法签名=方法名+参数类型列表java中不能存在相同的方法签名的方法方法重载:方法名一样,方法签名不同的方法(面试的时候,少用)方法重载:方法名一样,方法参数不一样(面试经常问)方法类型和个数一样不是重载方法,变量名字跟方法重载没有任何关系3)方法重载中通过参数的不同,来调用/区分不同的方法4)方法重载是多态一种的表现形式:eg打人,打水,打酱油,打麻将System.out.println(l);//intSystem.out.println(1.6);//doubleSystem.out.println。'卢象升");〃StringSystem.out.println(true);//boolean方法重载在我们程序随处可见要求:方法的功能必须要相似java中参数的传递(有点儿难)java中的参数传递的一般规则:基于值的传递,基本数据类型的变量,把■到形参当中;引用类型的变量,把堆当中专递到形参当中(堆当中对象的首地址),这样的话形参跟实参都指向堆当中的同一个对象案例:object2.Demol(引用类型)案例:object2.Demo2(基本类型)案例:object2.Demo3Point/Pointpoint(x,y)圆属性:圆心(point(x,y)) 半径r构造方法:1)参数:point(x,y)r2)参数:x,y,r方法:1)求圆的面积:Math.Pl*r*r2)判断一个点是否在圆上(这个点到圆心的距离大于r就不在这个圆上,小于等于r在这个圆上)分析:判断点的问题转化为判断点到圆心(点)的距离问题distance()3继承案例:extendsl.Person/Student人类:Person 父类属性:姓名,性别,年龄方法:说话学生:Student子类属性:姓名,性别,年龄,学号,分数方法:说话学习1)子类继承了父类的属性和方法格式:class子类extends父类{〃父类的属性/方法子类独有的方法/属性)2)子类不能继承父类的构造方法3)java中继承是单继承Java中永远都是单继承,但是可以多层次的单继承(一个类只能有一个父类)案例:extendsl.Demo54继承中构造方法的使用〃1)子类的构造方法,一定要调用父类的构造方法2)子类不能继承构造方法3)如果父类中没有无参的构造方法,则必须在子类的构造方法中明确的调用父类中的有参数的构造方法4)super:曾经的,过去的,可以在子类的构造方法中使用super来调用父类中的带参数的构造方法案例:extendsl.Demo6户类继承父类的出现问题5方法重写(覆盖)/变量隐藏都出现继承当中1)变量隐藏:子类定义的变量和父类中变量的名字一样,则父类中变量会被子类中的变量给覆盖案例:extends2.Demo72)super.属性名:可以调用被覆盖的父类中的属性3)方法的重写(覆盖):子类定义的方法:方法名,参数和返回值类型跟父类中的方法一致了,则父类的方法被子类的该方法给重写(覆盖)案例:extends2.Demo86this和super(this的老婆super的女友)this:当前的,现在的super:曾经的,过去的this.属性:当前对象的属性this.方法:当前对象的方法super.属性:父类中的属性super.方法:父类中的方法3)this(参数):调用本类中的其他的构造方法super(参数):调用父类中的构造方法7重载和重写重载:一个类当中,方法的名字相同,方法的参数不同功能:是根据参数的不同来调用不同的方法重写:父类和子类当中,而且方法的名字相同,方法的参数相同功能:子类的方法覆盖父类中继承过来的同名同参方法1父类声明指向子类对象(上转型对象)案例:extends3.Demol1)父类声明指向子类对象,该对象可以访问子类重写父类的方周2)父类声明指向子类对象,不可以访问子类独有的方法3)父类声明指向子类对象,可以强制转化为子类对象2question案例案例:questionl.*classSingleQuestionextendsQuestion(}classMultiQuestionextendsQ.uestion{}SingleQuestion的对象和MultiQuestion的对象放到同一个数组里面?(数组大小的要固定,保存同一个类型的数据)解决方法:1)创建一个数组:Questionf]question=newQuestion[2];(用这个父类来创建数组)2)给数组添加元素:question[0]=newSingleQuestion(...);questionfl]=newMultiQuestion(...);(父类声明指向子类对象)案例:questionl.QuestionDemo33static:静态l)static修饰(关键字),可以用来修饰:变量,方法,语句块,类2)static修饰变量:属于类级别的变量,是在类加载的时候直接加载到内存当中,所有的类的对象可以共享同一个静态变量特点:用static修饰变量,我们叫做静态变量,该变量跟类有关,跟对象无关访问静态变量:类名.静态变量名案例:staticl.Demo4/Student3)static修饰方法:属于类的方法,所有该类的对象都可以访问该方法在静态方法里不可以调用实例变量。但是可以调用静态变量特点:用static修饰方法,我们叫做静态方法,该方法跟类有关,跟对象无关方法静态方法:类名.静态方法名案例:staticl.Demo54)代码块:用{语句}的java的语句块,每次在创建对象的时候,自动调用5)静态代码块:使用static修饰的代码块,不管该类创建多少个对象,静态代码块只调用1次,在jdbc,Hibernate,Spring中使用及其频繁案例:staticl.Demo6

4访问权限控制(一)不同包可以类内部 不同包可以public 可以 可以用public修饰的变量,方法,类private 可以 不可以 不可以用private修饰的变量,方法,类重点:private修饰的任何方法/属性,只能在本类的内部访问,外界无法访问案例:demol.Demo7企业开发中,一般能使用private修饰都尽可能的使用private修饰健议)属性,般使用private方法一般使用public访问权限控制:体现java中的封装特性2月2月17日面向对象周日知识点:1访问权限控制(访问权限控制修饰符)(二)类内包内子类任意public可以可以可以可以protected可以可以可以不默认可以可以不不private可以不不不案例:demo3.Koo/Demoldemo4.Kool/Demo22javaBean(POJO)不是语法,是企业开发为了开发方便,习惯性的编码规范特点:1)类必须要放到一个包下面2)属性最好定义为私有的,必须要有能够访问该属性的方法3)给访问属性的方法,命名的规范,属性名:xxx,访问的方法的名字必须:一般属性: getXxx()setXxx(参数)boolean属性:isXxx() setXxx(参数)4)该类必须要实现可序列化接口(i。再说)5)javaBean必须要有空参的构造方法案例:javaBeanl.Demo3/Person好处:调用的时候方便3final:最终的,最后的修饰类,方法,属性1)用final修饰的类,表示这个类不可以再被继承,叫最终类案例:finall.Demo4一般jdk的工具类,大部分都是用final修饰的,我们写的类,一定不要使用final修饰,strutsl.x/2.x,hibernate3.2/3.5/4.0,spring2.5/3.0底层实现全部是基于动态代理实现,如果用final修饰我们写的类,使用不了动态代理技术(以后再说)2)用final修饰方法,这个方法不可以被重写案例:finall.Demo53)用final修饰变量,该变量初始化以后,不可以再被修改a:用final修饰的局部变量b:用final修饰的方法参数c:用final修饰的引用类型的变量(这个对象不可以修改,但是对象的属性可以修改)案例:finall.Demo64)常量:值永远都不在发生变化固定的写法:(public)staticfinal数据类型常量名=值;一般在属性中定义常量名:最好字母全部大写案例:finall.Demo74抽象类一不是具体的类(有的方法没有的实现)1)抽象的方法一只有行为的概念,没有具体的实现只有方法的声明/没有方法的实现,需要靠子类来实现格式:publicabstract返回值类型方法名字(参数列表);格式:abstrctclass类名{■3)抽象类的子类必须要实现所有的抽象方法4)抽象类只能被继承,一个具体的类来继承一个抽象类,并且实现其方法5)■ 实例化,(小♦以仞用父,小此指向♦,对,案例:图形类(Shape):抽象类属性:point(x,y)方法:1)求该图形的面积2)a)判断一个点Point是否在图形的上面b)判断一个点(x,y)是否在图形的上面圆(Circle):具体类,继承图形类,并且要实现其方法长方形企业开发当中,程序员分为两类:设计人员:项目经理/架构师编码人员:高级程序员,组长,中级程序员,初级程序员案例:设计一个类:Car基本属性:name,color,speed抽象方法:启动,行驶,刹车(只有方法的声明,没有方法的实现)Car的子类:来实现这些抽象的方法Bmw/QQ案例:absl.Car/Bmw/QQ5接口1)一般认为是一个特殊的抽象类2)特点:接口中的方法全部都是抽象方法,接口中的属性全是常量3)对比接口格式和抽象类格式抽象类的格式abstractclass类名{属性构造方法一般方法抽象方法)接口的格式interface接口名{常量抽象方法)发现一个问题:接口的格式更适合于设计,现在的企业开发当中,大部分都使用接口来做设计,抽象类使用较少,而且接口及其灵活案例:interfacel.DemolO4)接口中的常量和抽象方法的简写常量:数据类型常量名=值;抽象方法:返回值类型方法名字(参数);5)接口不能够直接的实例化,可以让实现类来实例化,接口跟实现类直接关系就是一种特殊的继承关系6)接口可以使用父类声明指向子类对象(web开发中经常使用)7)Java中类的继承是比较单一的,尤其功能方法:因为是类是单继承接口可以实现多继承,一个类可以实现多个接口,近似的实现了多继承案例:interfacel.Demoll2月18日周一面向对象J2SE:String集合类异常处理时间类io流多线程网络编程反射知识点:接口(二)接口之间可以多继承案例:interface2.Demolcard案例:Card属性:花色:CLUB(梅花),DIAMOND(方块),HEART(红桃),SPADE(黑桃),JOKER点数:THREE=0;FOUR=1;FIVE=2;SIX=3;SEVEN=4;EIGHT=5;NINE=6;TEN=7;JACK=8;//JQUEEN=9;〃QKING=10;//KACE=11;//ADEUCE=12;//2BLACK=13;〃小王COLOR=14;〃大王案例:cardl.Card/CardDemo2Object:java体系中最底层的一个类,Object是所有类的父类,所有的类都间接或直接的继承于Object案例:objectl.Demo3l)Object:toString(),hashCode(),equals。必须掌握2)toString():用来描述当前对象的文本(String)信息,一般是默认调用,返回的结果包名.类名@hashcode,结果没用,必须重写(要把该类的对象显示出来)重写toString():把属性信息描述出来案例:objectl.Demo43)equals():判断两个对象是否相等案例J:objectl.Demo5/Point(1)比较两个对象是否相等比较的是引用值是否相等(堆当中的对象的地址是否相同)"equals()":Object根上的类,equals比较就是但是我们认为的相等,一般指的属性,所以equals跟比较有关的时候,必须重写(2)重写equals。方法,原则equals在Object类中声明,默认的比较规则是:比较引用值建议覆盖,实现对象的比较(比较对象的状态:属性,就是比较对象的数据)。覆盖规则:a自反.:对于任何非空引用值x,x.equals(x)都应返回trueob对称性:对于任何非空引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)才应返回true。c传递性:对于任何非空引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)返回true,那么x.equals(z)应返回true。d

温馨提示

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

评论

0/150

提交评论