多态
对象的多种形态
1,引用多态父类的引用可以指向本类的对象,
可以指向子类的对象 Animal obj = new Dog();
2,方法多态创建本类对象时,该对象所调用的方法为本类方法;
当我们是引用多态时,创建子类对象时,调用的方法为子类‘重写’或者从父类‘继承’来的方法。
继承是多态的实现基础
● 多态中的引用类型转换
向上类型转换,即自动类型转换,小类型到大类型,没有风险,子->父
向下类型转换,即强制类型转换,大类型到小类型,有风险,父->子
instanceof运算符,避免类型转换的安全性问题
//多态中的引用类型转换
Dog dog=new Dog();//创建一个对象,并用子类的引用指向这个对象
Animal animal = dog;//父类的引用指向子类对象,自动类型提升 向上类型转换
Dog dog2 = (Dog)animal;//向下类型转换 强制类型转换(但是存在风险,如下)
if(animal instanceof Cat){
Cat cat = (Cat)animal;
}else {
System.out.println("animal无法进行类型转换成Cat类型");
}
/* 编译时Cat类型,运行时Dog类型
* 在内存中开辟内存空间的是Dog类型的对象,将父类引用转换成Cat子类引用时,进行强制转换,编译器不会报错,但运行报错
* Cat Dog是两个不同的类型,所以不能将Dog类转换成Cat类
* 通过Instanceof运算符避免类型转换的安全性问题
*/
● 多态中的抽象类
1、语法定义: 抽象类钱使用abstract关键字修饰,则该类为抽象类。 2、应用场景: a、在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法(抽象类就是约束子类必须有哪些方法,不关注子类如何去实现) b、从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性。 3、作用: 限制规定子类必须实现某些方法,但不关注实现细节。 4、使用规则: a、abstract定义抽象类 b、abstract定义抽象方法,只有声明,不需要实现 c、包含抽象方法的类是抽象类 d、抽象类中可以包含普通的方法,也可以没有抽象方法 e、抽象类不能直接创建,可以定义引用变量,指向子类对象
创建父类时设置为抽象类(约束子类),继承的子类里会自动实现父类要求的方法public abstract class Telphone{ public abstract void call(); //抽象方法没有方法体以分号结束 public abstract void message(); } main: Telphone tel1=new Cellphone(); tel1.call(); tel1.message(); Telphone tel2=new SmartPhone(); tel2.call(); tel2.message();
● Java中的接口
接口 一种特殊的类类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供某些方法。
定义接口,用interface关键字。接口就是用来被继承,被实现的,修饰符一般用public
[public] interface 接口名 [extends 父接口1,父接口2...]{0~多个常量定义...
0~多个抽象方法的定义...
}接口可以理解为一种特殊的类,由全局常量和公共的抽象方法所组成;接口是一种规范,用来约束类;接口中的常量即使定义时不添加 public static final ,系统也会自动加上;方法都是抽象方法;使用接口:一个类可实现一个或多个接口,实现接口使用implements关键字。
修饰符class类名extends父类implements接口1,接口2.。。{
类体部分//如果继承了抽象类,需要实现继承的抽象方法;要实现接口中的抽象方法
}
如果要继承父类,继承父类必须在实现接口之前
给接口命名,通常给Name前加一个I,与其他类区别开
定义一个接口之后,在主类方法中用匿名内部类实现一个接口,可以把接口实例化,免除了创建一个类来实现接口匿名内部类,就是没有名字的内部类,多用于关注实现而不关注实现类的名称
语法格式:
Interface i = new Interface(){
public void method(){
System.out.println("匿名内部类实现接口的方式");
}
}
●UML
统一建模语言
常用UML图:
用例图(The Use Case Diagram):以可视化表达系统如何满足业务规则和特定的用户需求
序列图(The Sequence Diagram):用于按照交互发生的一系列顺序,显示对象之间的这些交互
类图/类别图(The Class Diagram):UML类图、业务逻辑和所有支持结构一同被用于定义全部的代码结构.描述类之间的关系,类中的属性和方法
UML建模工具 Visio、Rational Rose、PowerDesign 三种建模工具应用最广 1. Rational Rose,它是 IBM 的 http://www.uml.org.cn/RequrementProject/200604043.htm 2. Microsoft 的 Microsoft Office Visio http://www.microsoft.com/china/office/xp/visio/default.asp 3.PowerDesigner http://www.uml.org.cn/UMLTools/powerDesigner/powerDesignerToolIntroduction.htm
继承关系是实线,接口关系是虚线