🍬 博主介绍
👨🎓 博主介绍:大家好,我是 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自带