写点什么

java 三大特性之多态的认识,以及多态的实际应用(一

  • 2022 年 5 月 10 日
  • 本文字数:1047 字

    阅读完需:约 3 分钟

a. m2 是会调用 B 类中的 m2,B 类中的 m2 重写了 A 类中的 m2,所以找的就是 B 类覆盖之后的 m2.


为便于理解程序已加详细注释说明:


package d11;


class duot{


public static void main(String[] args) {


/*多态的使用


Animal 类,定义了 eat()和 sleep()方法,


Animal 的子类 Dog 类,覆盖了 sleep 类,添加了 shout()方法


多态就是 可以把(dog 类)对象放入(Animal 类)的引用里面,


就是把子类放入父类引用,Animal a =new Dog();


通过这个引用 a 能调用 eat()和 sleep()方法,不能调用 shout()方法,因为 Animal 类中没有调用 shout(),


a.sleep()是会调用 dog 类中的 sleep(),dog 类中的 sleep()重写了 Animal 类中的 sleep,


所以 a.sleep()找的就是 dog 类覆盖之后的 sleep(). */


Animal a =new Dog();


a.eat();//This is a eat()


//a.shout();//不能调用 shout 方法,会报错,Animal 类中没有调用 shout 方法;


a.sleep();//sleep 3 hours


/*类型转换


子类引用赋值给父类引用,可以直接赋值。


父类引用赋值给子类引用,必须_强制类型转换,


保证编译通过,但是运行时可能发生 类型转换异常。


*/


//(编译时不出错,运行时可能发生类型转换异常)


//这个强制类型转换其实是给编译器看的,使他不理会这个异常,


//因为 Animal 类中并不一定装的是这个 dog 对象。只是可能,


//如果换成 Animal a =new Cat();则就会编译不报错运行报错类型转换异常


Dog d =(Dog)a;//引用间的赋值;需要强制类型转换,


d.shout();//这时候就能调用 shout 方法了,


//instanceof 关键字


/*Instanceof 是一个二元运算符组成一个布尔表达式;


使用方法: 引用 instanceof 类名


就是判断该引用所指向的对象 和后边的这个类名是否兼容;


可以把 instanceof 形象的比喻为 是不是 是就是真,不是就是假;


*/ //例:a 里面装的是一个狗


System.out.println(a instanceof Dog);//true a 是一个狗


System.out.println(a instanceof Cat);//false a 不是一个猫


System.out.println(a instanceof Animal);//true a 是一个动物


//instanceof 关键字可以规避上面的风险,先判断 a 里面装的是不是狗


//是去做强转,绝对不会出错,否则不强转;


//所以上面程序可以改为:


if (a instanceof Dog) {


Dog d =( 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 Dog)a;


d.shout();


}


}


}


class Animal{


public void eat(){


System.out.println("This is a eat()");


}


public void sleep(){


System.out.println("sleep 6 hours");


}


}


class Dog extends Animal{


public void shout(){


System.out.println("Wang Wang !!!");


}

用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
java三大特性之多态的认识,以及多态的实际应用(一_Java_爱好编程进阶_InfoQ写作社区