🍬 博主介绍👨🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!
目录
前言
一、内存图
1、构造方法 继承(不管什么修饰符,子类都不能继承)
2、成员变量 继承(子类都可以继承)
继承的内存图:
3、成员方法 继承(虚方法表中可以继承)
内存分析工具
前言
- 误区1:父类私有的东西,子类就无法继承
- 误区2:父类中非私有成员,就被子类继承下来了
一、内存图
private 表示私有
public 表示非私有
1、构造方法 继承(不管什么修饰符,子类都不能继承)
下面代码中,创建的Z2对象,就会因为没有继承父类,产生报错
package demon1;public class Test {public static void main(String[] args) {//利用空参构造创建子类对象Zi z1 = new Zi();//利用带参构造创建子类对象//Zi z2 = new Zi("zhangsan",23);}
}class Fu{String name;int age;public Fu(){}public Fu(String name,int age){this.name = name;this.age = age;}
}class Zi extends Fu{//如果一个类中没有构造方法,虚拟机会自动的给你添加一个默认的空参构造}
2、成员变量 继承(子类都可以继承)
继承的内存图:
- name和age因为被private修饰,所以不能被子类直接调用
3、成员方法 继承(虚方法表中可以继承)
- 只有父类中的虚方法才能被子类继承
- fushow2是private修饰的,所以不能传到z1中的虚方法表中
内存分析工具
import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {/* Zi z = new Zi();z.fuShow1();*///把对象的地址值z以16进制的形式打在控制台上//System.out.println(Long.toHexString(VM.current().addressOf(z)));//因为内存分析工具需要程序不停止// Scanner sc = new Scanner(System.in);//sc.next();}
}class Fu {private int a = 0x111;int b = 0x222;public void fuShow1() {System.out.println("public --- FuShow");}private void fuShow2() {System.out.println("private --- FuShow");}
}class Zi extends Fu {int c = 0x333;public void ziShow() {System.out.println("public --- ZiShow");}
}
- jdk自带