面向对象之多态
开发工具与关键技术:Java
作者:陈希雄
撰写时间:2019/4/24
多态:指同一个实体同时具有多种形式,好比如,冰和水其实它们都是同一种事物,水是液态,冰是固态,本质是一样的 , 这就是说"水"有多种形态,也就是说实体有多种形态,其实本质还是一样的,只不过形态不一样而已; 编译时的类型由声明该变量时使用的类型决定,运行时的类型由实际赋给变量的对象决定。 如果编译时类型和运行时类型不同,就出现多态
Eg:
前提:Student extends Person:
Personp=new Person();
Student s=new Student();
Personp=new Student();
前提必须是子类继承父类,就可以用父类变量指向子类实体
注意:子类变量不可以直接指向父类实体,如果需要指向必须通过强制转换
Eg:
格式:
向上转型(子类→父类):(自动完成) 父类名称 父类对象 = 子类实例 ;
向下转型(父类→子类):(强制完成) 子类名称 子类对象 = (子类名称)父类实例 ;
对象名 instanceof 类
判断指定的变量名此时引用的真正类型是不是当前给出的类或子类;
总结:对象的类型和类必须有继承关系
Student s=( Student)new Student ();
实现多态的机制: 父类的引用变量可以指向子类的实例对象,而程序调用的方法在运行期才动态绑定,就是引 用变量所指向的真正实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引 用变量的类型中定义的方法。
多态的作用: 把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码, 做出通用的编程,以适应需求的不断变化。 只修改方法的实现,不必修改方法的声明 继承是多态产生的前提条件;
分类: 编译时多态:方法重载 运行时多态:方法覆写
Eg:
//动物
class Zoology{
void eat(){
System.out.println("吃。。。。。。");
}
}
class Cat extends Zoology{
void eat(){
System.out.println("我要吃鱼");
}
}
class Dog extends Zoology{
void eat(){
System.out.println("我要吃狗粮");
}
}
输出:猫吃鱼
狗吃狗粮