您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 马剑威_Java_05_面向对象高级
第5章:面向对象高级课程大纲课程大纲1、继承的基本概念15、简单工厂模式1、继承的基本概念2、继承的限制3、子类的实例化过程4方法的重写15、简单工厂模式16、静态代理模式17、适配器模式4、方法的重写5、super关键字6、继承应用18、内部类19、数据结构之链表20基本数据类型包装类7、final关键字8、抽象类9、接口20、基本数据类型包装类21、包与访问修饰符接10、多态性11、instanceof关键字12抽象类应用模板方法模式12、抽象类应用—模板方法模式13、接口应用—策略模式14、Object类1继承的基本概念1、继承的基本概念1、继承是面向对象三大特征之一2、被继承的类称为父类(超类),继承父类的类称为子类(派生类)3、继承是指一个对象直接使用另一对象的属性和方法。4、通过继承可以实现代码重用1继承的基本概念1、继承的基本概念语法:[访问权限] class 子类名extends 父类名{类体定义;}示例:public class Dog{protectedString name;}public class HomeDog extends Dog{//类的定义}}2继承的限制2、继承的限制1、Java只能实现单继承,也就是一个类只能有一个父类2、允许多层继承,即:一个子类可以有一个父类,一个父类还可以有其他的父类。3、继承只能继承非私有的属性和方法。4、构造方法不能被继承3子类的实例化过程3、子类的实例化过程在子类进行实例化操作的时候,首先会先让其父类进行实例化操作。之后子类再自己进行实例化操作。子类的实例化过程:子类实例化时会先调用父类的构造方法子类实例化时会先调用父类的构造方法如果父类中没有默认的构造方法,在子类的构造方法中必须显示的调用父类的构造方法4方法的重写4、方法的重写方法重写(overriding method)在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。关于方法重写的些特性关于方法重写的一些特性:1、发生方法重写的两个方法返回值、方法名、参数列表必须完全一致(子类重写父类的方法)2、子类抛出的异常不能超过父类相应方法抛出的异常(子类异常不能大于父类异常)3子类方法的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)3、子类方法的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)5关键字5、super关键字super可以完成以下的操作:使用super调用父类中的属性使用super调用父类中的方法使用super调用父类中的构造方法6继承应用6、继承应用实现一个化妆品商城中的化妆品管理1、定义一个化妆品类(Cosmetic)2、定义一个化妆品管理类(CosmeticManager)(1)实现进货功能(2)可以输出所有化妆品信息功能3、使用继承实现一个可按单价排序输出所有化妆品的功能使用继实个输出进化妆品的功能4、使用继承实现一个只输出进口化妆品的功能7fil关键字7、final关键字使用final关键字完成以下的操作:使用final关键字声明一个类使用final关键字声明一个方法使用final关键字声明一个常量8抽象类8、抽象类抽象类的基本概念1、很多具有相同特征和行为的对象可以抽象为一个类;很多具有相同特征和行为的类可以抽象为一个抽象类。2、使用abstract关键字声明的类为抽象类人男人女人8抽象类8、抽象类//声明一个抽象类public abstractclass Women{private String name;public abstractvoid say();//抽象方法}抽象类的规则:1、抽象类可以没有抽象方法,有抽象方法的类必须是抽象类非抽象类继抽象类须实所有抽象方法2、非抽象类继承抽象类必须实现所有抽象方法3、抽象类可以有方法实现和属性4、抽象类不能被实例化抽象类不能声明为5、抽象类不能声明为final9接口9、接口接口的概念1、接口是一组行为的规范、定义,没有实现(JDK1.8默认方法)2、使用接口,可以让我们的程序更加利于变化3、接口是面向对象编程体系中的思想精髓之一4、面向对象设计法则:基于接口编程9接口9、接口接口的定义格式:interface 接口名称{全局常量;抽象方法;//接口实现class Girl implements Hit{public void cry(){}示列:interface Hit{py(){//}}public void cry(); }//接口实现lddl{class Goddess implements Hit{public void cry(){ //… }}9接口9、接口接口的使用规则:1、接口可以继承多个接口2、一个类可以实现多个接口3、抽象类实现接口可以不实现方法4、接口中的所有方法的访问权限都是public5、接口中定义的属性都是常量10多态性10、多态性多态是面向对象三大特性之一什么是多态性?多态性我们大概可以分为两类:(1)方法的重载与重写(2)对象的多态性10多态性10、多态性对象的多态性:对象多态性是从继承关系中的多个类而来,向上转型:将子类实例转为父类实例格式:父类父类对象= 子类实例;自动转换以基本数据类型操作为例:int i= ‘a' ; (因为char的容量比int小,所以可以自动完成)向转型将类实例转为类实例向下转型:将父类实例转为子类实例格式:子类子类对象= (子类)父类实例;强制转换以基本数据类型操作为例:char c = (char)97; 因为整型是个字节比个字节要大所以需要强制完成因为整型是4个字节比char 2个字节要大,所以需要强制完成10多态性10、多态性多态性小结:1、方法的重载与重写就是方法的多态性表现2、多个子类就是父类中的多种形态3、父类引用可以指向子类对象,自动转换4、子类对象指向父类引用需要强制转换(注意:类型不对会报异常)5、在实际开发中尽量使用父类引用(更利于扩展)11if关键字11、instanceof关键字语法格式如下:对象instanceof类型--返回boolean类型值该语句一般用于判断一个对象是否为某个类的实例,是返回true,否返回false11if关键字11、instanceof关键字父类的设计法则通过instanceof关键字,我们可以很方便的检查对象的类型,但如果一个父类的子类过多,这样的判断还是显得很繁琐,那么如何去设计一个父类呢?1、父类通常情况下都设计为抽象类或接口,其中优先考虑接口,如接口不能满足才考虑抽象类。个具体的类尽可能不去继承另个具体类这样的好处是无需检查对象是否为父类的对象2、一个具体的类尽可能不去继承另一个具体类,这样的好处是无需检查对象是否为父类的对象。12抽象类应用模板方法模式12、抽象类应用—模板方法模式模板方法模式(Templete Method):定义一个操作中的算法的骨架,而将一些可变部分的p实现延迟到子类中。模版方法模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤。13接口应用策略模式13、接口应用—策略模式策略模式(Strategy Pattern),定义了一系列的算法,将每一种算法封装起来并可以相互替gy换使用,策略模式让算法独立于使用它的客户应用而独立变化。OO设计原则OO设计原则:1、面向接口编程(面向抽象编程)2、封装变化3、多用组合,少用继承14Obj类14、Object类Object类是类层次结构的根类。j每个类都使用Object 作为超类。所有对象(包括数组)都实现这个类的方法所有类都是Obj类的子类所有类都是Object类的子类。14Obj类14、Object类publicStringtoString()方法public String toString()方法返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明且易于读懂的信息表达式。建议所有子类都重写此方法。14Obj类14、Object类public boolean equals(Objectobj) pqjj指示其他某个对象是否与此对象“相等”。equals 方法在非空对象引用上实现相等关系:自反性对称性对称性传递性一致性致性14Obj类14、Object类使用Object类型传输数据示例:public class ObjectDemo{public static void main(String[] args){//method方法调用}public static void method(Object obj){//处理逻辑}}15简单工厂模式15、简单工厂模式简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模简单厂模式是个厂对象决定创建出哪种产类的实例简单厂模式是厂模式家族中昀简单实用的模式。16静态代理模式16、静态代理模式代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。y代理模式说白了就是“真实对象”的代表,在访问对象时引入一定程度的间接性,因为这种间接性可以附加多种用途。17适配器模式17、适配器模式适配器模式(Adapter ):将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能起作的那些类可以起作而不能一起工作的那些类可以一起工作。OO设计原则:面向接口编程(面向抽象编程)1、面向接口编程(面向抽象编程)2、封装变化3、多用组合,少用继承4对修改关闭对扩展开放4、对修改关闭,对扩展开放18内部类18、内部类内部类就是在一个类的内部定义的类。成员内部类格式如下:class Outer {class Inner{}}编译上述代码会产生两个文件:和Outer.class和Outer$Inner.class。18内部类18、内部类在外部创建内部类对象内部类除了可以在外部类中产生实例化对象,也可以在外部类的外部来实例化。那么,根据内部类生成的*.class文件:Outer$Inner.class“$”符号在程序运行时将替换成“.”所以内部类的访问:通过“外部类.内部类”的形式表示。Outer out = new Outer() ;// 产生外部类实例声内部类对象Outer.Inner in = null; // 声明内部类对象in = out.new Inner() ; // 实例化内部类对象18内部类18、内部类方法内部类格式如下:方法内部类内部类可以作为一个类的成员外,还可以把类放在方法内定义。格式如下:class Outer {public void doSomething(){注意:1、方法内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化。class Inner{public void seeOuter(){}}2、方法内部类对象不能使用该内部类所在方法的非final局部变量。}}}18内部类18、内部类静态内部类在一个类内部定义一个静态内部类:静态的含义是该内部类可以像其他静态成员一样,没有外部类对象时,也能够访问它。静态嵌套类仅能访问外部类的静态成员和方法。套类仅能访问外部类的静态成员和方法。class Outer{static class Inner{}}}class Test {public static void main(String[] args){Outer.Innern = new Outer.Inner();}}}18内部类18、内部类匿名内部类匿名内部类就是没有名字的内部类。匿名内部类的三种情况:(1)继承式的匿名内部类(1)继承式的匿名内部类(2)接口式的匿名内部类(3)参数式的匿名内部类18内部类18、内部类在使用匿名内部类时,要记住以下几个原则:(1)不能有构造方法,只能有一个实例。(2)不能定义任何静态成员、静态方法。
本文标题:马剑威_Java_05_面向对象高级
链接地址:https://www.777doc.com/doc-5899014 .html