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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 纤路 中级黑马   /  2016-1-25 23:41  /  1199 人查看  /  5 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

一 多态

多态前提:
a:要有继承关系。
b:要有方法重写。(没有这条多态没有意义)
c:要有父类引用指向子类对象。

多态中的成员访问特点:(多态不影响构造方法的特点)
  1.成员变量:编译看左边(父类),运行看左边(父类)。

  2.非静态成员方法:编译看左边(父类)如果父类中没有该方法编译失败,运行看右边(子类)。(动态绑定)

  3.静态成员方法: 编译看左边(父类),运行看左边(父类)。(静态绑定,相当于用类名调用)  (静态和类相关,算不上重写,所以,访问还是左边的

关键字 instanceof 判断前边的引用是否是后边的数据类型

多态的好处
  a:提高了代码的维护性(继承保证)
  b:提高了代码的扩展性(由多态保证)(作为参数传递时,才体现出多态的扩展性)
  c:可以当作形式参数,可以接收任意子类对象

多态的弊端:不能使用子类的特有属性和行为。

抽象类:
抽象类特点
  a:抽象类和抽象方法必须用abstract关键字修饰
    abstract class 类名 {}
    public abstract void eat();

  b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口
  c:抽象类不能实例化那么,抽象类如何实例化呢?:按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
  d:抽象类的子类要么是抽象类,要么重写抽象类中的所有抽象方法

面试题1
    问题:一个抽象类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
    答案: 可以   这么做目的只有一个,就是不让其他类创建本类对象,交给子类完成
   
    问题二: abstract 不能和哪些关键字共存
          1.abstract和static:被static修饰的方法可直接由类名调用,但是抽象方法是没有意思的
          2.abstract和final:被abstract修饰的方法强制子类重写,被final修饰的不让子类重写,所以他两是矛盾的
          3.abstract和private:被private修饰的是为了让子类看到并强制重写,被private修饰的不让子类访问,所以他两是矛盾的

二 接口

接口成员特点:(不能有成员变量)
成员变量;只能是常量(具有被final修饰的特点),并且是静态的并公共的。默认修饰符:public static final 这三者的顺序可以改变
建议:自己手动给出。

构造方法:接口没有构造方法(接口是干爹,不是亲爹,默认继承Object类)

成员方法:只能是抽象方法,默认修饰符:public abstract
建议:自己手动给出。
(所以实现接口的类修饰权限一定要是public)

类与类,类与接口:接口与接口的关系
a:类与类继承关系,只能单继承,可以多层继承。

b:类与接口实现关系:可以单实现,也可以多实现,并且还可以在继承一个类的同时实现多个接口。

c:接口与接口继承关系:可以单继承,也可以多继承。

抽象类和接口的区别
A:成员区别
   抽象类:
   成员变量:可以变量,也可以常量
   构造方法:有
   成员方法:可以抽象,也可以非抽象
   接口:
   成员变量:只可以常量
   成员方法:只可以抽象
               
B:关系区别
   类与类:继承,单继承
   类与接口:实现,单实现,多实现
   接口与接口:继承,单继承,多继承
               
C:设计理念区别:
   抽象类被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
   接口被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。













5 个回复

倒序浏览
好详细啊,学习了。
回复 使用道具 举报

好详细啊,学习了。
回复 使用道具 举报
整理的好详细,但是还是不太理解多态。。。。。。。。
回复 使用道具 举报
总结的很详细~~已收藏~~
回复 使用道具 举报
学习了.棒棒哒!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马