下面程序可以很好的解释什么是多态:
一个A类,定义了m1和m2方法
A类的子类B类,覆盖了m2(),添加了m3方法
多态就是 可以把B类对象放入A类的引用里面,就是把子类放入父类引用,A a =new B();
通过这个引用a能调用m1和m2方法,不能调用m3方法,因为A类中没有调用m3,
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 =(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 !!!”);
}
public void sleep(){
System.out.println(“sleep 3 hours”);
}
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
将为你打开新的学习之门!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!