-------------多态----------------- (1)面向对象三大核心思想; 1、封装 2、继承 3、多态 (2)多态定义:父类的引用指向子类的对象。 (3)引用指的是父类声明的一个引用型变量,变量有: 1、成员变量 2、静态变量 3、构造方法的变量 4、普通方法的变量 5、声明就用的变量 (4)变量的声明一般来说需要三步:声明数据类型 声明变量名 赋值 但是严格来讲为两步:声明数据类型 声明变量名 (5)赋值有两种情况:1、父类型声明,赋值一个父类型的引用值 父类型声明,赋值一个子类型的引用值 2、多态 (6)里氏替换原则:能使用父类的地方,一定可以使用子类 (7)多态的概念: 编译阶段,将父类的属性,生成属性列表,编译时绑定 运行阶段,将子类生成一个对象,子类也有自身属性列表,运行时绑定 程序运行时,通过父类的属性去调用子类对象的属性(特指成员方法) (8)具体调用:运行阶段 1、遍历父类的属性列表 2、遍历子类的属性列表 3、如果子类有相同,就调用子类的,没有就调用父类的 4、如果父类没有所指属性,直接报错,子类中不用去
public class Poly01{ public static void main(String[] args){ Big a = new Big(); a.eat();//输出父类 Big b = new Small(); b.eat();//输出子类 //b.happy();//报错:找不到符号 b.cry();//输出父类 }}class Big{ public void eat(){ System.out.PRintln( "大的吃小的" ); } public void cry(){ System.out.println( "大的在哭" ); }}class Small extends Big{ public void eat(){ System.out.println( "小的不让大的吃" ); } public void happy(){ System.out.println( "小的很高兴" ); }}class Tiny extends Big{ public void eat(){ System.out.println( "很小的" ); }}
多态发生的前提:有继承关系的两个类中(或说体系) 多态有两种类型:1、向上转型,这是从数据类型角度,把子类对象当成父类来处理,可看作自动类型转换
2、向下转型,强制类型转换 自动类型转换:1、基本数据类型中,低精度向高精度 2、引用数据类型中,子类向父类强制类型转换:1、基本数据类型中,高精度向低精度 2、引用数据类型中,子类向父类
public class Poly02{ public static void main(String[] args){ //---------向上转型---------- Big a1 = new Small(); a1.eat();//输出子类 //a1.happy();//找不到符号 //向上转型的缺点:对丢失子类对象中特有的属性 //---------向下转型---------- //向下转型是基于某个类的对象向上转型后,才可向下转型 Small a2 = (Small) a1; a2.happy();//输出子类 a2.cry();//调用父类 a2.eat();//输出子类 //---------instanceof-------- //运算符:判断当前对象是不是某个类实例化而来的 Big a3 = new Tiny(); a3.eat(); //Small b2 = (Small) a3; //b2.happy();//编译通过,但是java.lang.ClassCastException错误 if (a3 instanceof Small){ Small b2 = (Small)a3; } System.out.println(a3 instanceof Small ); //为了避免java.lang.ClassCastException错误,java引入了instanceof运算符 //instanceof运算符,其运算结果是boolean; // if( 引用 instanceof 类型名)-->true/false }}
以上就是我的理解.欢迎大家指导!
新闻热点
疑难解答