java 多态
什么是多态?
个人描述
就比之人,人之下,有男人,女人,好人,坏人,天才,蠢才,他们既有人之共性,又有他自己的特点。你叫不同的人去做同样的事,结果自然会不尽相同。
菜鸟学院的多态描述
实例
抽象类
package polymorphic;
public abstract class Printer {
//打印
abstract void printer();
}
彩色打印机
package polymorphic;
public class CSPrinter extends Printer {
@Override
void printer() {
System.out.println("打印效果:彩色");
}
}
黑白打印机
package polymorphic;
public class HBPrinter extends Printer {
@Override
void printer() {
System.out.println("打印效果:黑白"); }
}
测试
package polymorphic;
public class PrinterManager {
public static void main(String[] args) {
Printer printer=new CSPrinter();
printer(printer);
printer(new HBPrinter());
}
static void printer(Printer printer) {
printer.printer();
}
}
结果
分析
如上所示,传入的对象不同,所产生的打印效果也不同,这就是多态。
多态存在的三个必要条件
- 继承
java 继承,存在继承才有父类子类的区别。 - 重写
Java 重写(Override),通常、子类需要通过重写具体实现父类的方法。 - 父类引用指向子类对象
一个父类类型的变量,持有的是一个指向其子类对象的引用。
如下:Father(父类) 类型的引用指向的是 Son(子类) 的实例(对象)
Father son=new Son();
向上转型
子类对象可以自动的转为父类类型。
Father son=new Son();
向下转型
向上转型是向下转型的必要条件(只有上了山,才有下山这一说)
//向上转型
Father son=new Son();
//向下转型
if (son instanceof Son){
Son son1= (Son) son;
}
instanceof 关键字 : son 对象 是否是 Son 类的一个实例。
- 为防止类型强转失败,通常需要使用该关键字进行类型判断。