5_2、Java基本语法之面向对象的多态性

本文深入解读多态性的概念,通过实例演示其在类的继承与方法重写中的作用。探讨向上转型、向下转型及其注意事项,并以Java编程为例,剖析经典面试问题。涉及对象多态、方法调用绑定和常见应用场景。

一、多态性的理解

        理解:可以理解为一个事物的多种形态。

二、何为多态性

        多态性是指对象的多态性,父类的引用指向子类的对象(或将子类的对象赋值给父类的引用)

举例:

//其中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、多态是编译时行为还是运行时行为?
        多态是运行时行为。对于多态,只有等到方法调用的那一刻,解释运行器才会确定所要调用的具体 方法,这称为“晚绑定”或“动态绑定”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值