Android-Java-子类实例化过程(内存图)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Android-Java-子类实例化过程(内存图),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3274字,纯文字阅读大概需要5分钟。
内容图文
案例一:
package android.java.oop15; // 描述Person对象 class Person { // 构造方法就算不写 默认有一个隐式的无参构造方法:public Person(){} ,一旦写了构造方法 隐式的构造方法就消失了 public Person() { System.out.println("Person() run..."); } } // 描述Student对象 class Student extends Person { // 构造方法就算不写 默认有一个隐式的无参构造方法:public Person(){} ,一旦写了构造方法 隐式的构造方法就消失了 public Student() { System.out.println("Student() run..."); } } public class DemoTest { public static void main(String[] args) { Student student = new Student(); } }
执行结果:
案例一分析:
为什么 new Student(); 会去调用 Person的构造方法?,然后Person的构造方法先执行 Student的构造方法后执行?
答:因为Student 继承了 Person,所以在实例化Student的时候 需要先父类初始化,才能拿到父类的内容,然后在Student子类初始化;
案例二:
package android.java.oop15; // 描述Person对象 class Person { // 构造方法就算不写 默认有一个隐式的无参构造方法:public Person(){} ,一旦写了构造方法 隐式的构造方法就消失了 public Person(String value) { System.out.println("Person() run..."); } } // 描述Student对象 class Student extends Person { // 构造方法就算不写 默认有一个隐式的无参构造方法:public Person(){} ,一旦写了构造方法 隐式的构造方法就消失了 public Student() { // super(); // 报错? 不能(隐式/显示)调用Person的无参构造方法,因为Person的无参构造方法已经没有了 // 显示调用 Person(String value){} super("人名"); System.out.println("Student() run..."); } } public class DemoTest { public static void main(String[] args) { Student student = new Student(); } }
执行结果:
案例三:
package android.java.oop15; // 描述Person对象 class Person { // 构造方法就算不写 默认有一个隐式的无参构造方法:public Person(){} ,一旦写了构造方法 隐式的构造方法就消失了 public Person(String value) { System.out.println("Person() run..."); } } // 描述Student对象 class Student extends Person { // 构造方法就算不写 默认有一个隐式的无参构造方法:public Person(){} ,一旦写了构造方法 隐式的构造方法就消失了 public Student() { this("薛刚当"); // 注意:构造方法的第一行一旦写了 this/super 隐式的super就消失了 System.out.println("Student() run..."); } public Student(String value) { // super(); // 报错? 不能(隐式/显示)调用Person的无参构造方法,因为Person的无参构造方法已经没有了 // 显示调用 Person(String value){} super(value); // 注意:构造方法的第一行一旦写了 this/super 隐式的super就消失了 } } public class DemoTest { public static void main(String[] args) { Student student = new Student(); } }
执行结果:
案例二 案例三 分析:所有的构造方法,隐式第一行 都是 super(); --调用-> public 父类(){} , 所有构造方法 第一行一旦写了 this() this(值) super() super(值) 第一行隐式的super()消失
案例四-(子父类 有内存图):
package android.java.oop15; // 描述Person对象 class Person { public String name = "李四"; public int age = 90; // 构造方法就算不写 默认有一个隐式的无参构造方法:public Person(){} ,一旦写了构造方法 隐式的构造方法就消失了 public Person() { System.out.println("Person() run..."); } } // 描述Student对象 class Student extends Person { // 构造方法就算不写 默认有一个隐式的无参构造方法:public Person(){} ,一旦写了构造方法 隐式的构造方法就消失了 public Student() { System.out.println("Student() run... --> name:" + this.name + " age:" + age); } } public class DemoTest { public static void main(String[] args) { Student student = new Student(); } }
执行结果:
以上案例对应内存图:
内容总结
以上是互联网集市为您收集整理的Android-Java-子类实例化过程(内存图)全部内容,希望文章能够帮你解决Android-Java-子类实例化过程(内存图)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。