我是java的新手,我在Casting上遇到了一些问题.我有一个名为Parent的类,一个名为Children的类,Children类是Parent的子类.
public class Parent
{
int age;
String occupation;
public void print()
{
System.out.println("My age is:"+ age + "and i am a:" + occupation);
}
}
public class Children extends Parent
{
int height;
public static void main(String args[])
{
Children c = new Children();
Parent p = new Parent();
p=c;
c=(Children) p;
/**Here***/
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我在施法后添加p.XXX时,我只看到年龄和职业可以访问,例如p.当我做c.xxx时,我看到所有年龄,职业和身高都可以访问.我以为当我做p = c时,p现在被认为是一个子类的实例不是吗?如果是,那么为什么我没有看到高度整数可访问?当我执行c =(Children)p时,将一个Parent类的实例分配给Children类的实例,并且由于Parent实例没有选项,这就是为什么我们从父类转换为子类,这是正确的吗?
我以为当我做p = c时,p现在被认为是一个子类的实例不是吗?
不,变量的类型p仍然存在Parent.该值将是对实例的引用Children,但编译器不会将其考虑在内.它仅使用声明的变量类型.
当我这样做时
c=(Children)p,Parent类的一个实例被分配给一个Children类的实例,并且因为Parent实例没有选项,那么我们为什么要从父级到子级进行转换,这是正确的吗?
那么你根本就没有改变实例.您正在转换类型的表达式Parent- 该值将是一个引用.在执行时,JVM将确保该值实际上是对某个实例Children或某个子类型(或null)的引用- 如果不是,则JVM将引发异常.
区分变量,引用和对象非常重要 - 它们是三个完全不同的概念,并且确保您理解它们之间的区别将使许多其他事情更加清晰.
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |