Java基础第四天--多态

来源:互联网 发布:ps如何制作淘宝详情页 编辑:程序博客网 时间:2024/05/05 13:45

1. 多态:同一个对象在不同时刻表现出来的不同状态  

  什么是多态:一句话--将子类引用赋值给父类引用,通过父类调用子类的重写方法
  

   多态的前提:
   1)要有继承关系 2)要有方法重写 3)父类引用指向了子类对象
   注意:没有方法重写的多态是没有意义的
 

 

   注意一点:多态是父类引用根据它指向的子类对象,动态地调用属于子类的该函数(Java没有virtual关键字,默认是根据引用指向的实际对象调用相应的方法),这样的函数调用在编译器是无法确定的(调用的子类的函数的地址无法给出)。因此,这样的函数地址是在运行期绑定的(晚绑定)。

《Java编程思想》中说“不要犯傻,如果它不是晚绑定,它就不是多态”。

package 第十章继承的问题;class A{public static void prt(){System.out.println("1");}}class B extends A{public static void prt(){System.out.println("2");}}public class 子父类静态方法调用是多态吗 {public static void main(String[] args) {A a = new B();a.prt(); //不是晚绑定 不是多态 输出1}}


2. 多态的成员关系:
   成员变量:编译看左边,左边没有就报错
             运行也看左边
   成员方法:编译看左边,左边没有就报错
             运行看右边(方法有重写!!)
   主要原因在于方法有重写,而变量没有
   多态的弊端:父类不能使用子类的特有功能
  
3. 多态的好处:提高程序的可维护性和扩展性
   如果希望程序的扩展性强,最好使用多态机制。一个基本原则就是能使用父类,就不用子类,父类可以调用子类对象
   开闭原则:对修改关闭,对扩展开放
  
   向下转型的时候,注意可能会有一个异常:ClassCastException
  
 4. 抽象类:
   一个方法,如果只有方法声明,没有方法体,那么说明这个方法不是具体的,而是抽象的
   使用关键字abstract
 
 为什么要有抽象类?因为抽象方法不完成功能,代码反而更多了。。。
 使用抽象类及抽象方法的好处-->会强制要求子类必须完成某些功能
 
 特点
 1)在一个类中,抽象的方法是没有意义的,将来如果有一个类(非抽象类)继承了这个类,是必须重写该方法的
 2)如果在一个类中,有抽象方法,该类必须被定义为抽象类;抽象类中可以有非抽象方法
 3)抽象类是不能被实例化的
 
 抽象类中:
     成员变量:既可以是常量,也可以是变量
     成员方法:既可以是抽象的,也可以是具体的
     抽象方法:强制要求子类做事情
     具体方法1:提高代码复用性(子类和父类的具体方法相同)
     具体方法2:方法重写
            抽象类中可不可以没有抽象方法?可以,作用是不允许外部创建对象
     构造方法:有


  面试题:抽象类不能实例化,但是却有构造方法,请问有什么作用?
  因为子类的构造方法第一条语句是super(),所以抽象类要有构造方法,用于对子类访问父类的数据进行初始化
  而不是为了创建对象
 
 抽象类关键字abstract不可以和哪些关键字共存?
 1)final final修饰的方法不能被重写,而abstract修饰的必须被重写,冲突
 2)private private修饰的方法不能被重写,而abstract修饰的必须被重写,冲突
 3)static static修饰的方法,可以直接通过类名来调用,而abstract修饰的方法没有方法体,调用没有意义
 
5. 接口 interface关键字 类实现 implements 接口
   接口中的成员特点:
   1)成员变量:接口中只有常量,它有默认修饰符:public static final
   2)接口是没有构造方法的 实现接口的类的构造方法默认调用object()构造方法
         接口不能被实例化,只能在子类中采用多态的方式实现
   3)成员方法:接口中只有抽象方法,它有默认修饰符:public abstract
  
   接口的思想特点:
   1)接口的出现降低耦合性,而继承实际上是增加耦合性的
         程序的要求:低耦合,高内聚
         耦合:类与类的关联关系  内聚:自己完成功能的能力
         程序的要求:效率和安全 为了安全,就要做很多校验,就会影响效率  
   2)接口可以用来多实现
   单一规则:接口在定义规范的时候,功能尽量单一,因为类可以实现多个接口

  
 接口的实现特点:
 1)或者类本身是抽象类,抽象类不需要实现接口的功能
 2)或者类实现接口的所有方法
 
 类与接口是实现关系:
  1)一个类可以单实现接口,也可以多实现接口(“多继承”)
  2)一个类还可以在继承一个类的同时实现多个接口  
 接口与接口的关系:继承关系,可以单继承也可以多继承
 类与类的关系:只能单继承
  
 抽象类与接口的对比

共性:都是抽取出来的东西
不同点:

    1)抽象类和接口的成员区别
    抽象类:
            成员变量:既可以是变量,也可以是常量
            构造方法:有,用于子类访问父类数据的初始化
            成员方法:既可以是抽象的,也可以是具体的
    接口:
            成员变量:public static final
            成员方法:public abstract


   2)类和接口的关系: 实现关系,可以单实现,也可以多实现
         还可以在继承一个类的同时,实现多个接口
         类和类的关系: 继承关系,只能单继承
         接口与接口的关系:继承关系,可以单继承,也可以多继承


   3)本质特征(什么时候用抽象类,什么时候用接口 设计)
         抽象类被继承体现的是:is a 的关系。抽象类中定义的是这个体系的共性的内容
         接口被实现体现的是:like a 的关系。接口中定义的是这个体系的扩展功能 
     
6. 如何实现一个继承体系
   分析:由具体到抽象
   实现:由抽象到具体
  
   学习:抽象的内容,因为它定义的是共性的内容
   使用:具体的类,因为它才是真正的实现,具备最多的功能
 

0 0
原创粉丝点击