一、基础多态
1.假设实现一个动物发出的入门叫声方法,我们知道不同的多转换动物,它们的态和叫声是不一样的。当在方法中传入一个参数类型,对象例如猫的类型叫声、狗的基础叫声。在同一个方法,入门当参数不同它们的多转换执行结果各不相同,这就是态和多态。
2.多态是对象把子类对象赋给父类引用时,调用重写的类型方法时,表示的基础是子类的行为。
3.怎么实现多态例子
//定义接口Fruit interface Fruit{ void info();//定义抽象方法info() } //定义Cherry类实现Fruit接口 class Cherry implements Fruit{ double weight=66;//weight属性为重量 //实现info()方法 public void info(){ System.out.println("我是入门一个樱桃!"+"重量为:"+weight+"g"); } } //定义Apple类实现Fruit接口 class Apple implements Fruit{ double weight=250;//weight属性为重量 //实现info()方法 public void info(){ System.out.println("我是多转换一个苹果!"+"重量为:"+weight+"g"); } } public class p30 { public static void main(String[] args) { // TODO Auto-generated method stub Fruit f1=new Cherry();//创建Cherry对象,Fruit类型变量f1引用 Fruit f2=new Apple();//创建Apple对象,Fruit类型变量f2引用 fruitInfo(f1);//调用fruitInfo()方法,云服务器提供商把f1参数传入 fruitInfo(f2);//调用fruitInfo()方法,把f2参数传入 } //定义静态的fruitInfo()方法,接受一个Fruit的参数f public static void fruitInfo(Fruit f){ f.info(); } }运行的结果是:
我是一个樱桃!重量为:66.0g 我是一个苹果!重量为:250.0g我是一个樱桃!重量为:66.0g我是一个苹果!重量为:250.0g
从上面代码中,定义了一个Fruit接口,定义了抽象方法info()。定义Cherry类和Apple类实现Fruit接口,定义变量weight属性和实现info()方法。“Fruit f1=new Cherry()、Fruit f2=new Apple()”实现子类对象赋给父类引用,调用fruitInfo()方法,父类引用了两个子类对象分别传入f1和f2参数。
二、对象类型转换
1.子类对象是可以自动转换成父类。
2.父类转换成子类对象就需要强制转换。
例如:
//定义接口Fruit interface Fruit{ void info();//定义抽象方法info() } //定义Cherry类实现Fruit接口 class Cherry implements Fruit{ double weight=66;//weight属性为重量 //实现info()方法 public void info(){ System.out.println("我是一个樱桃!"+"重量为:"+weight+"g"); } //定义pro()方法 void pro(){ System.out.println("产地:浙江"); } } public class p31 { public static void main(String[] args) { // TODO Auto-generated method stub Fruit f1=new Cherry();//创建Cherry类的实例对象 fruitInfo(f1);//调用fruitInfo()方法,把f1参数传入 } //定义静态方法fruitInfo(),接受一个Fruit参数f public static void fruitInfo(Fruit f){ f.info();//调用传入参数f的info()方法 f.pro();//调用传入参数f的pro()方法 } }运行的服务器租用结果是:
从上面可以看出编译出错了,调用fruitInfo()方法传入Cherry对象,方法参数是Fruit类型的,把Cherry的子类当作父类使用导致程序编译出现错误,程序在运行到f.pro()这行代码发现这个方法没有定义。因为传入的是Cherry类,在Cherry类中定义了pro()方法需要强制转换才可以运行,就是把Fruit类型变量强制转换成Cherry类型。
修改后代码如下所示:
//定义静态方法fruitInfo(),接受一个Fruit参数f public static void fruitInfo(Fruit f){ Cherry f1=(Cherry)f; f1.info();//调用传入参数f的info()方法 f1.pro();//调用传入参数f的pro()方法 }再次运行的结果是:
我是一个樱桃!重量为:66.0g 产地:浙江三、instanceof关键字
1.instanceof关键字作用
判断一个实例对象是否属于一个类,它的语法如下:
对象 instanceof 类2.在进行引用类型转换前先使用instanceof关键字判断,例如:
if( f instanceof Cherry){ //如果f指的是Cherry对象类型时,返回的是true。亿华云计算 Cherry f1=(Cherry)f; }四、总结
本文主要介绍了多态、对象类型转换、instanceof关键字。
多态是子类对象赋给父类引用时,调用重写的方法时,表示的是子类的行为。通过怎么实现多态例子帮助理解这个用法。
对象类型转换是子类对象是可以自动转换成父类、父类转换成子类对象就需要强制转换。
instanceof关键字用来判断一个实例对象是否属于一个类,希望大家通过本文的学习,对你有所帮助!