🍬 博主介绍👨🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!
目录
多态调用成员的特点
代码演示
多态调用成员的内存图解
多态调用成员的特点
- 变量调用:编译看左边,运行也看左边
- 方法调用:编译看左边,运行看右边
代码演示
理解:
Animal a = new Dog();
现在用a去调用变量和方法的呀?是的
而a是Animal类型的,所以默认都会从Animal这个类中去找成员变量:在子类的对象中,会把父类的成员变量也继承下的。父:name 子:name
成员方法:如果子类对方法进行了重写,那么在虚方法表中是会把父类的方法进行覆盖的。
package demon7;public class test {public static void main(String[] args) {//创建对象(多态方式)//Fu f = new Zi();Animal a = new Dog();//调用成员变量:编译看左边,运行也看左边//编译看左边:javac编译代码的时候,会看左边的父类中有没有这个变量,如果有,编译成功,如果没有编译失败。//运行也看左边:java运行代码的时候,实际获取的就是左边父类中成员变量的值System.out.println(a.name);//动物//调用成员方法:编译看左边,运行看右边//编译看左边:javac编译代码的时候,会看左边的父类中有没有这个方法,如果有,编译成功,如果没有编译失败。//运行看右边:java运行代码的时候,实际上运行的是子类中的方法。a.show();///Dog --- show方法//理解://Animal a = new Dog();//现在用a去调用变量和方法的呀?是的//而a是Animal类型的,所以默认都会从Animal这个类中去找//成员变量:在子类的对象中,会把父类的成员变量也继承下的。父:name 子:name//成员方法:如果子类对方法进行了重写,那么在虚方法表中是会把父类的方法进行覆盖的。}
}class Animal{String name = "动物";public void show(){System.out.println("Animal --- show方法");}
}class Dog extends Animal{String name = "狗";@Overridepublic void show() {System.out.println("Dog --- show方法");}}class Cat extends Animal{String name = "猫";@Overridepublic void show() {System.out.println("Cat --- show方法");}
}