「java成员变量的覆盖」什么是成员变量的覆盖

博主:adminadmin 2023-01-16 18:30:09 1216

本篇文章给大家谈谈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成员变量的覆盖的信息别忘了在本站进行查找喔。