.Net转Java自学之路—基础巩固篇七(接口、多态)

接口 interface implements(实现)
当抽象类的方法都是抽象的时,这时把该类定义成接口
接口可称为特殊的抽象类。
特点:
  1、接口的方法都是抽象的
  2、接口不可以被实例化
  3、只有子类实现了接口中的所有方法后,该子类才可以实例化,否则该子类还是抽象类。
格式特点:
接口中常见的成员:1、全局常量;2、抽象方法;
接口中的成员都有固定的修饰符:全局常量:public static final 成员方法:public abstract 修饰符可省略
类只能单继承。接口可以被多实现,因为接口中方法没有主体。但接口与接口之间可以多继承
接口的基本思想:
  1、接口就是对外暴露的规则。
  2、接口是功能的扩展。
  3、接口的出现降低了耦合性。
抽象类与接口的区别:
  1、抽象类只能被单继承;接口可以被多实现
  2、抽象类中可以定义非抽象方法,直接被子类使用;接口中只有抽象方法,必须被子类实现后才能使用。
  3、抽象类中定义体系中基本共性功能;接口中定义体系中的扩展功能。
  4、接口避免了单继承的局限性。
  5、抽象类被继承,是 is a(所属)关系;接口可以被实现 是like a(像)关系。

多态:

  一个具体的动作,具备多种体现类型。
  1、在程序中的体现:父类引用或者接口引用指向了自己子类的对象。
  2、好处:提高代码扩展性,后期的维护性。
  3、前提:
    1、类与类之间必须有继承或实现关系
    2、同常都需要覆盖
  4、弊端:
  进行多态应用时,前期是并不知道后期会有多少个子类出现,但可以使用父类引用来调用父类的方法。而后期那个子类对象出现就执行那个子类的具体方法类实现。这是程序的扩展性。但是,前期调用时,只能调用父类的方法,而不能调用具体子类的特有方法。因前期不知道具体的子类。
  父类对象指向子类类型,那么该子类就自动提升为了父类类型。例:父类 fu=new 子类() 转换后提升后的子类可用“(子类)”强转成该子类对象。
判断类型:instanceof
  对象 instanceof 类型

在多态中:
  成员变量:
    编译时期:看的引用型变量所属的类中是否有所调用的变量.
    运行时期:也是看引用型变量所属的类是否有调用的变量。
    简单一句话:成员变量,无论编译还是运行都看引用型变量所属的类。
    更简单的话:成员变量,编译和运行都看 等号 的左边。

  成员函数:
    编译时期:看的引用型变量所属的类中是否有调用的方法。
    运行时期:看的对象所属的类中是否有调用的方法,
    如果父子出现同名方法,会运行子类中的方法。因为方法有覆盖特性。
    简单说:对于成员函数,编译看左边,运行看右边。
    其实非静态函数,在内存有一个动态绑定机制。其实就是f指向了具体的子类对象。
    编译看到的f所属的Fu类中是否有这个方法。
    运行的时候f就绑定到了一个具体的子类对象上,
    子类对象运行时会覆盖父类中的相同想法,而运行子类的内容。

  静态函数:
    编译时期:看的是引用型变量所属的类中是否有调用的方法。
    运行时期:也是看的是引用型变量所属的类中是否有调用的方法。
    简单说: 对于静态函数,编译看左边,运行也看左边.

  整体总结:
    成员变量和静态成员:编译和运行都看左边。
    只有非静态的成员函数:编译看左边,运行看右边。

posted @ 2018-05-23 00:30  水痕灬  阅读(228)  评论(0编辑  收藏  举报