「java成员变量的覆盖」什么是成员变量的覆盖
本篇文章给大家谈谈java成员变量的覆盖,以及什么是成员变量的覆盖对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、JAVA成员变量隐藏和方法的覆盖
- 2、java在继承中父类的成员变量是否会被子类所覆盖
- 3、java中覆盖方法中的变量问题
- 4、如何理解Java中的隐藏与覆盖
- 5、java中有关成员变量的覆盖???
- 6、java小问,关于子类覆盖父类成员方法的问题
JAVA成员变量隐藏和方法的覆盖
从入口程序main开始看,第一句话是
Subclass Subc=new Subclass();
其作用是实例化Subclass类的一个实例出来,使用的构造函数是无参构造函数。
现在转向看Subclass类,在这个类的无参数构造函数中代码如下:
Subclass(){
super();//A
x=5;//B
System.out.println("in Subclass:x="+x);//②
}
可以看得见第一句使用的是super()方法,起作用是继承父类Superclass的构造方法:
Superclass(){
x=3;
System.out.println("in Superclass:x="+x);//①
}
也就是说Subclass()方法代码内容是如下的内容:
Subclass(){
x=3;
System.out.println("in Superclass:x="+x);//①
x=5;//B
System.out.println("in Subclass:x="+x);//②
}
所以现在这里有两个输出语句,结果如下:
in Superclass:x=3
in Subclass:x=5
现在返回入口程序main()方法,开始执行该方法中的第二句话:
Subc.dosomething();
这句话的作用是执行Subclass类中的dosomething方法,所以我们查看Subclass类的方法void dosomething()内容如下:
super.dosomething();
System.out.println("in Subclass.dosomething()");
System.out.println("super.x="+super.x+"\tsub.x="+x);
可以看到,第一句话super.dosomething();是继承父类的dosomething()方法,用父类的这个方法内容替换掉这句话,void dosomething()内容如下:
System.out.println("in Superclass.dosomething()");//③
System.out.println("in Subclass.dosomething()");//④
System.out.println("super.x="+super.x+"\tsub.x="+x);//⑤
所以这里就是连续输出三句话:
in Superclass.dosomething()
in Subclass.dosomething()
super.x=3 sub.x=5
一定要知道super的作用,super()就是使用父类的构造函数,super.属性/s uper.方法,就是使用父类属性/方法。
java在继承中父类的成员变量是否会被子类所覆盖
给你看两个例子 我刚敲的:
第二个例子:这两个例子的区别只有一句话 由此证明了子类从父类继承的时候 如果有同名的成员变量 默认情况下 父类的成员变量是被屏蔽的 如果你非要调用父类的成员变量 请使用super关键字
java中覆盖方法中的变量问题
多态: 方法可以表现多态 因为方法是动态绑定的 如果子类有覆盖父类的方法 那么虚拟机会使用子类的方法 如果子类中没有重写父类方法 那么就调用父类本身的方法
属性不能表现多态 因为属性跟实例引用名字是一体的!
obj你声明的就是一个Object类型 当然找不到x,为什么toString()却能打印出来 x,y 因为子类覆盖了父类的方法 虚拟机进入子类 执行子类重写的方法 而子类方法是能找到它本身的x 和 y的!
如何理解Java中的隐藏与覆盖
隐藏与覆盖类方法
在讲清这个问题之前,先明白什么是隐藏?什么是覆盖?
所谓隐藏,是指运行时系统调用当前对象引用的编译时类型中定义的方法;对于覆盖,则指运行时系统调用当前对象引用运行时类型中定义的方法。
所以在执行Student1
s
=
new
Graduate1();和Graduate1
g
=
new
Graduate1();时,(1)先进行Student1类的构造,这里包括两个方法study()和exercise(),由于study()方法被覆盖,所以先执行Graduate1里study(),再执行Student1里的exercise();(2)再进行Graduate1类的构造,同样包括两个方法study()和exercise(),所以执行顺序为先Graduate1里的study()方法,再Graduate1里的exercise()方法。
2.
隐藏与覆盖成员变量
如果子类中的变量和父类中的变量具有相同的名字,那么子类中的变量就会隐藏父类中的变量,不管他们的类型是什么,也不管他们是类变量还是实例变量。
所以在执行诸如System.out.print(s.math);之类的s实例的程序时,显示为Student1类的成员变量,而执行诸如System.out.print(g.math);之类的g实例的程序时,显示为Graduate1类的成员变量。
java中有关成员变量的覆盖???
apple 类继承fruit类,就继承了fruit的weight属性,你在apple里定义weight会覆盖fruit类的,所以输出的都是11
java小问,关于子类覆盖父类成员方法的问题
这里考虑覆盖关系还要考虑类的初始化顺序
这里其实是涉及类的初始化。
因为有继承关系,所以它在调用子类Atest()构造器前,先调用了父类的构造器,有个隐藏的 super();调用,但因为test()被覆盖,它会调用子类的test(),这时子类的成员变量只是定义,还未进行初始化赋值,而int型的默认初始值为0,如果你把i变成String型,你会发现第一次输出为null
java成员变量的覆盖的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于什么是成员变量的覆盖、java成员变量的覆盖的信息别忘了在本站进行查找喔。