多态 polymorphism,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有 在执行过程中才被决定而非在编译期间就决定了。这对于大型系统来说能提高系统的灵活性和扩展性。
java中如何实现多态?使用多态的好处?
引用变量的两种类型: • 编译时类型(模糊一点,一般是一个父类)
• 由声明时的类型决定。
• 运行时类型(运行时,具体是哪个子类就是哪个子类)
• 由实际对应的对象类型决定。
多态的存在要有3个必要条件:要有继承,要有方法重写,父类引用指向子类对象
这里没有写
• 子类转换为父类:自动转换
上转型对象不能操作子类新增的成员变量和方法。
上转型对象可以操作子类继承或重写的成员变量和方法
如果子类重写了父类的某个方法,上转型对象调用该方法时,是调用的重写方法。
• 父类转换为子类:强制转换
(绝不是做手术,而是父类的真面目就是一个子类,否则会出现类型转换错误
使用了关键词 abstract 声明的类叫作”抽象类”。
抽象类是对抽象的世界建模,是作为父类使用的。比如: 请求出一个图形的面积? 这是你的思考究竟是什么图形?这个图形太抽象了?是三角形还是原型?图形怎么求面积?这个时候就可以把图形定义为抽象类。
几个要点
抽象方法和抽象类均必须用abstract来修饰。抽象方法没有方法体,只需要声明不需实现。有抽象方法的类只能定义能抽象类 。相反抽象类里面的方法不一定全是抽象方法,也可能没有抽象方法。抽象类可以包含属性、方法、构造方法。抽象类不能实例化,及不能用new来实例化抽象类,只能用来被子类调用。抽象类只能用来继承。抽象方法必须被子类实现。抽象类的子类必须覆盖所有的抽象方法才能被实例化,否则还是抽 象类。这里没有写
接口(interface ),比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束。全面地专 业地实现了:规范和具体实现的分离
• 格式:
• [访问修饰符] interface 接口名 [extends 父接口1,父接口2…] {
• 常量定义 //总是public static final
• 方法定义 //总是:public abstract •
}
只是给 JVM 的一种标识而已,就是 JVM 的通行证。 1)、java.lang.Cloneable :不是所有的对象都可以被克隆 否则CloneNotSupportedException 2)、java.io.Serializable
实际开发中,一个业务逻辑处理类永远不要去继承一个实现好的类,要么继承抽象类,要么实现接口,优先使用接口,避免单继承的局限 :abstract class表示的是"is a"关系,interface表示的是"like a"关系