java基础十三 面向对象特点_多态

来源:互联网 发布:笑猫日记第二季淘宝 编辑:程序博客网 时间:2024/04/30 06:36

多态,就是事物存在的多种形态

java中多态形成的条件是:

要有继承的关系存在,要有方法的重写,要有父类引用指向子类对象(Animal a = new Dog()就是将动物类的引用指向子类Dog,也就是指狗是一只动物)

多态的成员访问:

访问成员变量时,访问到的是父类的成员变量,访问成员方法时,最后运行的是子类的成员方法

向上转型和向下转型

父类引用指向子类对象就是向上转型,Father f = new Son();

而Son s = (Son)f就是向下转型(必须在有向上转型的情况下才能向下转型)

多态的优缺点:

优点:提高了代码可维护性和扩展性(可维护性是通过继承来保证的,扩展性是通过多态保证的)

缺点:不能使用子类特有的属性和行为 

抽象类

抽象就是看不懂的,不知道某个功能具体怎么实现时就用抽象方法

抽象的特点

抽象类和抽象方法必须用abstract关键字来修饰

抽象类不一定包含有抽象方法,但是有抽象方法的类一定要是抽象类

抽象类是不可以被实例化的,它需要通过具体的子类来实例化,这也是多态的一种体现

抽象类的子类可以是抽象类(没意义),也可以是一个具体类(这个类重写了所有的抽象方法)

抽象类的成员特点

成员变量:既可以是变量,也可以是常量(abstract是不能修饰成员变量的)

成员方法:既可以是抽象方法,也可以是普通方法,但是抽象方法是强制要求子类实现的,而普通方法可以重写,可以不重写(此时就相当于继承父类)

构造方法:抽象类是有构造方法的,是为了让子类来访问父类的初始化数据

接口

从狭义上讲,就是java中的interface,从广义上讲,对外提供规则的就是接口

接口的特点

接口用关键字interface来标识

类实现接口需要用关键字implements

接口是不能实例化的(也是需要用多态的方式来实例化)

接口的子类可以是抽象类(意义不大),可以是具体类(此时就需要重写接口里面的所有抽象方法)

接口的成员特点

成员变量:只能是常量,并且是静态而且公共的

成员方法 只能是抽象方法

没有构造方法

类,接口的相关关系

类和类是继承关系,并且只能单继承

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

接口和接口是继承关系,可以单继承也可以多继承

抽象类和接口的区别

成员区别
抽象类的成员变量可以是变量也可以是常量,有构造方法,成员方法可以抽象也可以非抽象

接口的成员变量只能是public static final修饰 的,也就是常量,没有构造方法,成员方法都是抽象的

关系区别

类和类只能单继承

接口与接口可以单继承也可以多继承

设计理念不同

抽象类,能被继承,继承体现了" is a" ,抽象类定义的是该继承体系的共性功能

接口,能被实现,体现了"like a ",接口体现的是该继承体系的扩展功能

0 0