nxmxx / blog

记录我的学习路程和我的进步
1 stars 0 forks source link

多态 #19

Open nxmxx opened 4 years ago

nxmxx commented 4 years ago

多态 1.定义:多态是对于对象来定义,举例学生这个对象既是学生,又是人。他是多种状态的。 2.多态性的前提:extends继承或implement实现是多态性的前提; 2.多态的使用和格式: 父类名称 对象名 =new 子类名称(); 或者 接口名称 对象名 = new 子类名称(); 3.多态中成员变量的访问特点 注:与继承中成员变量的访问特点一模一样。直接通过对象名称去访问对象名称左边的类中的:成员变量、成员方法中的成员变量。 (1) 直接访问: 定义:直接通过对象名称去访问对象名称左边的类中的成员变量,如果没找到就向上找。 使用类: Psvm(){ //多态的使用 fu as =new zi(); as.num; //as 是父类对象,所以在优先调用父类中的成员变量,没有向上找,不向下找。

} (2) 间接访问: 定义:通过访问方法去间接访问成员变量,父类或子类成员变量在其类中的方法当中,通过调用其所在方法便可访问成员变量,若找不到就向上找 使用类: Psvm(){ //多态的使用 fu as =new zi(); as.showNum(); //有重复变量名时,as 是父类对象,所以在优先调用父类中的成员方法,没有向上找,不向下找。 }

  1. 多态中成员方法的访问特点 定义:与继承中访问成员方法规则一摸一样,创建对象new出谁就访问谁,找不到就向上找。 口诀:编译看左,运行看右。多态中成员方法访问,首先判断成员方法是否在对象创建左边类中,在便可编译,然后去运行创建对象右边类中的方法。 为什么编译看左,运行看右呢? 举例,父类为动物,子类为猫,并不是所有动物都和猫一样吃鱼, 实际各子类中有不同的属性,并不是属于父类中的,所以父类中没有的方法,多态使用时不能调用。 使用类: Psvm(){ //多态的使用 fu as =new zi(); as.showNum();//父类子类都有,new的是子类,优先子类 as.methodfu();//父类有,子类没有,new出的是子类,子类在没有找到,向上找父类,找到使用。 as.methodzi();//错误写法,父类没有,子类有,所以无法编译,会报错。

}

5.使用多态的好处 好处:无论右边new的时候换成哪个子类对象,等号左边调用方法都不会改变。

6.对象的向上转型 定义:对象的向上转型就是父类引用指向子类,也就是多态。 缺点:使用了向上转型(父类引用指向子类),就没办法去调用子类的方法。

7.对象的向下转型 问题描述:使用了向上转型(父类引用指向子类),就无法使用子类方法,所以使用向下转型“还原”。 定义:将父类对象还原成为本来子类的对象。 前提:先存在向上转型,才会向下转型。 格式: 父类名称 对象名 = new 子类名称();//必须先有向上转型 子类名称 对象名 = (子类名称)父类名称;//向下转型

8.instanceof关键字进行判断向下转型是否异常