一、多态性的理解
理解:可以理解为一个事物的多种形态。
二、何为多态性
多态性是指对象的多态性,父类的引用指向子类的对象(或将子类的对象赋值给父类的引用)
举例:
//其中Man为Person类的子类
Person p = new Man();
Object o = new Data();
三、多态性的使用
多态性的使用体现在:虚拟方法的调用
>了对象的多态性后,在编译期,只能调用父类中声明的方法,在运行期,实际执行的是子类中重写的方法。
>总结:编译,看左边;运行,看右边。
四、多态性的使用前提
前提:1、类的继承关系 2、方法的重写
五、多态性的应用举例
public class AnimalTest {
public static void main(String[] args) {
AnimalTest test = new AnimalTest();
test.fun(new Dog());
test.fun(new Cat());
}
//举例一
public void fun(Animal animal){
animal.eat();
animal.shout();
}
}
class Animal{
public void eat(){
System.out.println("动物吃饭");
}
public void shout(){
System.out.println("动物叫");
}
}
class Dog extends Animal{
public void eat(){
System.out.println("狗吃骨头");
}
public void shout(){
System.out.println("汪汪汪");
}
}
class Cat extends Animal{
public void eat(){
System.out.println("猫吃鱼");
}
public void shout(){
System.out.println("喵喵喵");
}
}
//举例二
class Order{
public void method(Object obj){
//方法体
}
}
//举例三
class Dirves{
public void fun(Connection conn){//conn = new MySqlConnection();
// conn.method1();
// conn.method2();
// conn.method3();
}
}
六、多态性使用的注意点
多态性只适用于方法,不适用属性。即编译和运行都看左边。
七、关于向上转型与向下转型
1、向上转型:多态。
2、向下转型
2.1、为什么使用向下转型:有了对象的多态性后,内存中实际上加载了父类和子类的所有结构,但在编译时,变量被编译为父类类型,所以只能调用父类的方法和属性,子类特有的方法和属性不能调用。如何才能调用子类特的方法和属性呢?
2.2、如何实现向下转型:使用(向下转型)强制类型转换符:()
2.3、使用时的注意点:
①ClassCastException异常
②为了避免向下转型时出现ClassCastException异常,我们在进行向下转型操作时,使用instanceof关键字进行判断,如果返回true,就进行向下转型。如果返回false,就不进行向下转型。
2.4、instanceof的使用:
① a instanceof A:对象a是不是类A的实例,如果是,返回true;如果不是,返回false。
② 如果a instance A 返回true,a instance B 也返回true,那么类B是类A的父类。
③ 要求a所属的类与类A必须是子类和父类的关系,否则编译错误。
2.5、基本数据类型转换与向下转型类比图

八、经典面试题
1、谈谈你对多态性的理解?
①实现了代码的通用性。
②Object类中定义的public boolean equals(Object obj){ }
③JDBC:使用java程序连接数据库,对数据进行操作。(MySql\DB2\...)
④抽象类、接口的使用肯定体现了多态性(因为抽象类、接口都不能实例化)
2、多态是编译时行为还是运行时行为?
多态是运行时行为。对于多态,只有等到方法调用的那一刻,解释运行器才会确定所要调用的具体 方法,这称为“晚绑定”或“动态绑定”。
本文深入解读多态性的概念,通过实例演示其在类的继承与方法重写中的作用。探讨向上转型、向下转型及其注意事项,并以Java编程为例,剖析经典面试问题。涉及对象多态、方法调用绑定和常见应用场景。
722

被折叠的 条评论
为什么被折叠?



