java 三大特性之多态的认识,以及多态的实际应用(一
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 !!!");
}
评论