/**
* 关于关键字super
* 1.super是一个关键字,全部小写
* super与this对比着学习
* this:
* - 能出现在实例方法和构造方法中
* - 语法结构是:"this."、和"this()"
* - this不能使用在静态方法中
* - this.大多数情况下可以省略(在区分实例变量和局部变量时不可以省略。比如set方法中和构造方法中)
* - this() 只能出现在构造方法的第一行,通过当前的构造方法去调用"本类中"其他的构造方法,目的是:代码复用
* super:
* - 能出现在实例方法和构造方法中
* - 语法结构是:"super."、和"super()"
* - super不能使用在静态方法中
* - super.大多数情况下可以省略
* - super.什么时候不能省略呢?
* 父类和子类中有同名属性,或有同样的方法,想在子类中访问父类的该属性或方法,super.不能省略.
* - super() 只能出现在构造方法的第一行,通过当前的构造方法去调用"父类中"其他的构造方法,
* 目的是:创建子类对象的时候,先初始化父类型特征(并不是创建独立的对象)。
* - 重要结论:当一个构造方法第一行既没有this(),也没有super(),默认会有一个super();表示通过当前子类的构造方法
* 调用父类的无参构造方法,所以必须要保证父类的无参构造方法是存在的。
* - this()和super()不能共存,因为他们都需要出现在构造方法的第一行
* - 创建子类对象时,无论如何 父类中的构造方法(无参构造或有参构造)总有一个会被执行。
* - java语言中不管是new什么对象,老祖宗object类的无参是构造方法一定会执行(object类的无参是构造方法处于"栈顶部")。
* 栈顶部的特点是:最后调用,但最先执行结束(后进先出原则)
* - super 不是引用,它也不保存某个对象的内存地址,所以它也不指向任何对象,它只是代表当前对象内部的那一块父类型特征。
* * super的使用:
* super.属性名 [访问当前对象父类的属性]
* super.方法名() [访问当前对象父类的方法]
* super() [调用父类的构造方法]
*/
/**
* 判断以下代码指向顺序
*/
public class SuperText {
public static void main(String[] args) {
new Z();
}
}
class X{
public X() { //父类的这个构造方法最后被调用,最先执行
//在此构造方法的第一行默认有一行代码没有this();也没有super();就默认存在super();存在,它会调用Object的无参构造
//Object类的无参构造最后被调用,最先被执行(栈的特点:后入先出)
System.out.print("1 ");
}
}
class Y extends X{
public Y() {
System.out.print("2 ");
}
public Y(String name){
super();
System.out.print("3 ");
}
}
class Z extends Y{
public Z(){
this("张三");
System.out.print("4 ");
}
public Z(String name){
this(name,18);
System.out.print("5 ");
}
public Z(String name,int age){
super(name);
System.out.print("6 ");
}
}
/*
程序运行结果:
1 3 6 5 4
*/
javasuper存储的是父类的对象吗 在java中super
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
java将map中的值放到对象中
java将map中的值放到对象中
Java if语句 java