Java对象与内存管理
作者:网络转载 发布时间:[ 2013/4/1 9:47:59 ] 推荐标签:
运行结果:
2)上述是属于多态中方法的体现,但是方法有多态,实例变量无多态。
解释下“方法有多态,变量无多态”这句话:意思是,不管怎样,父类表面上只是调用属于自己的被子类重写的方法。而变量不一样,假设父类和子类都有同一个变量名的实例变量,向上转型后,通过父类访问的实例变量得到的值是自身的而非子类的。向下转型后,通过子类访问的实例变量得到的值是自身的而非父类的。
很多书上或教学视频上都讲,创建一个子类对象的时候,Java 会顺着继承结构往上一直找到 Object,然后从 Object 开始往下依次执行构造函数。先执行父类的构造函数,然后在其子类中会创建一个成员变量指向他的父类。其实这个说法是错误的,系统并不会真正的去创建父类对象,只是在子类对象中不仅保存了本身的实例变量,还有它父类的全部实例变量。
public class Test{
class Base { //父类
int i = 2;
}
public class Child extends Base{ //子类
int i = 20;
}
public static void main(String[] args) {
Test test = new Test();
Child child = test.new Child();
Base base = child;
System.out.println(" Base.i : " + base.i);
System.out.println("Child.i : " + child.i);
}
}
运行结果:
5、final修饰符
final变来那个在编译时被确定下来了,相当于一个直接量。
1)final修饰的实例变量赋值时机:
定义final实例变量时 指定初始值
在非静态初始化模块中为final实例变量指定的初始值
在构造器中为final实例变量指定初始值
2)final修饰的类变量赋值时机:
定义final类变量时指定初始值
在静态初始化模块中为final实例变量指定的初始值
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11