A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xyycici 中级黑马   /  2015-1-24 22:38  /  712 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.多态:
1)概念:对象在不同时刻表现出来的不同状态
2)前提:
@继承关系(类)或者实现关系(接口)
                            @方法重写(非必要,只是不写多态没有意义)
@父类(父接口)引用指向子类对象。
3)对象及分类:针对引用类型。分为接口多态、类多态、抽象类多态。
4)多态成员特点: eg . Fu f = new Zi ( );
         @成员变量:编译看左边,运行看左边。[成员变量不存在复写概念,调用的总是父类的内容。]
         @成员方法:编译看左边;(看父类有没有此方法,编译时仅仅看父类。)
运行看右边。(运行时先看子类有无此方法,子类没有,再去看父类的方法。)
注意:父类的引用不能调用子类的特有方法,只可以调用父类的内容、子类复写的方法。
eg1.
Fu f = new Zi1() ;
       f . show() ;    //调用子类方法(子类复写的情况下)   [变量没有复写概念]
       f.num;           //调用父类成员变量。   [方法有复写概念]
5)多态弊端:父类引用不能使用子类特有功能。(向上转型(强转))  
         @基本类型:隐式转换(小到大),强制转换(大到小)
         @引用类型:向上转型(小到大),向下转型(大到小)
eg.向上:Fu  f  =  newZi ( );              //父类引用指向子类对象。
向下:Zi  zi = (Zi) f ;                            //强制将父类类型转换成子类类型。
注:继承的弊端:强耦合性(父类添加了功能,子类被强制性添加了该方法。)                  
7)多态好处:可以提高代码的扩展性和可维护性。
                   @扩展性:多个类型的对象都可以调用。
                   @维护性:本来需要改100处,现在只需改1处。
注:形参可以是对象。
         多态的好处:一个引用性变量可以不断接受多个对象,不断被赋值,而不需要一直创建变量。
eg.
多态代码。(Animal。Pig。Cat。Wolf。)
         /*多态   Animal 吃
Cat 吃鱼
Wolf 吃小白兔
Pig 吃饲料
*/
定义了一个工具类
class AnimalTool
{
         public static void eat(Animala)                 //多态
         {
                   a.eat();     //这里的方法应该是父类必须有的,且子类都复写过的,这样a就会去调用子类相应复写的方法。
         }                           //对于多态(父类引用指向子类对象),父类引用.方法()会先去寻找子类的方法.
}
2.抽象类概述
1)概念:抽取功能(方法声明)。
从很多对象中抽取方法声明,从而定义在一个新的类中。没有方法体的方法被称为抽象方法;有抽象方法的类被称为抽象类。
         注意:抽象方法没有方法体。
eg.publicabstract void eat (); //无方法体。

2)特点:
                            @abstract修饰类和方法。(没有变量)
                            @有抽象方法的类一定是抽象类(或者接口);
                                     但抽象类中不一定有抽象方法。
                            @抽象类无法实例化。
                             ———实例化的方式:子类实现抽象方法,再创建子类对象。
                            @一个类是抽象类,继承它的子类要么是抽象类;要么重写所有抽象方法。
                            @有时候会选择父类是抽象类。
                            作用:强制要求子类必须完成某些功能。(因为子类必须复写所有抽象方法)
3)好处:提高代码的扩展性;(多态)
                            注意:继承好处:提高代码的复用性。
         eg.
abstract class Animal {……}
class Dog extends Animal{……}
//抽象类的多态
Animal a = new Dog( ) ;        //即抽象类的实例化。(父类引用指向子类对象。)
a.eat()  ;
4抽象类与接口的区别:(面试)
                   @成员特点:
a.抽象类的成员特点:
                            A:成员变量 有成员变量,也有常量。
                            B:构造方法 有构造方法的。
                                              用于子类访问父类数据前,对父类数据进行初始化(虽然不能被实例化)。
                            C:成员方法
                                     抽象方法,为了要求子类做某些事情。(强制复写)
非抽象方法,是为了提高代码复用性,被子类继承。
         b.接口成员特点:
                            A.成员变量:只能是常量。默认修饰符:public static final (不可以被子类赋值)
                            B.构造函数: 没有构造函数。(因为不需要对数据进行初始化,变量是静态的,以加载)
                                                                 注:继承接口的子类调用的super()是object类的无参构造方法。         
                            C.成员方法:只有抽象方法。默认修饰符:public abstract      
                            关系:接口是一种抽象类的特殊情况。
                            强调:接口的方法都是抽象的。推荐永远加修饰符。
                                     接口是不继承object类的。接口加载也生成class文件。
                   @设计理念的区别
                            抽象类(被继承):类中定义的是整个继承体系的共性内容。(is- a
                            接口(被实现):接口中定义的是整个体系的扩展内容。(like- a         
5)关系特点
                  类与类:单继承;多层继承。
                  类与接口:单实现;多实现。(继承一个类的同时,实现多个接口)
                  接口与接口:单继承;多继承。
             说明:接—接多继承的原因:即使父类接口同名,由于接口里的方法都是没有具体意义的,不会出现调用不明确的现象,子接口在具体实现时,复写即可(xy)。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马