2017-05-13 143 views
0

的基准创建一个不同的类的对象,我在Java中的新手....这都是要顺利,直到我发现下面的情况是可能的JAVA。从不同的类

package newProject; 

class A { 
} 
class B extends A { 
    } 

public class C { 

    public static void main (String[] args) { 
     A obj = new B(); 
    } 
} 

任何一个可以请解释我讲讲关于上述场景在细节方面怎么可能和它是如何工作在内存方面

+1

我觉得你的代码错误。 B类定义可能应该以'public class B extends A'开头。我希望代码原样是因为类型错误而失败。 – Carcigenicate

+0

请修复您的括号和缩进。 –

+0

感谢乡亲....我不担心语法在这里,但这个概念更多...这个问题背后的想法是要了解如何回忆在上述情况下或外行而言参与继承是如何工作的内部 –

回答

0

正如前面所说,这是不可能。然而,尽可能B扩展A.这将意味着B具有相同的属性,方法等为A +你添加到它的东西。

0

你被允许这样做

A obj = new B(); 

如果满足下列条件之一满足:

  • B类必须扩展类A

  • B类实现该接口的

所以,用你的类定义是不可能的! 现在,假设你有这样的:

class A { 
    void move(){...} 
} 
class B extends A { 
    void start(){...} 
    void dispose(){...} 
} 
A obj = new B(); 

可以调用唯一有效的方法是:

obj.move(); 

但因为对象是new B你可以调用所有声明B分析方法,但你需要投

((B)obj).start(); 
+1

我现在编辑了我的帖子......谢谢..是的,我的意思是继承。我已经读过,对象的地址存储在相同类型的引用变量中。例如:考虑'B obj = new B();'。 B obj将在堆内存中用对象B(新B())的地址在引用内存中引用创建一个变量。因此,在栈中的引用变量OBJ的值将作为XX101(说的堆内存对象的地址)......但现在如何符合上述理论,如果我的引用类型为A –

+0

@AbhishekUpadhyay ...谢谢,我检查更新,我认为现在解释更好的版本... –