class arijit
{
public static void main(String args[])
{
System.out.println("Base class main");
amit ab=new amit(); //how is it possible as the sub class object also holds base class
ab.a();
ab.ma();
}
public void m()
{
System.out.println("Base class method");
}
}
class amit extends arijit
{
public void a()
{
System.out.println("Sub Class method");
m();
}
}
答案 0 :(得分:2)
您的问题的关键似乎是您在其基类amit
的{{1}}方法中创建了main
类的实例,而您却在想怎么可能。
为什么不可能?您的arijit
方法按名称引用子类,因此它就像从该角度看的任何其他类一样。如果您愿意,也可以在非静态成员中执行此操作。
在体系结构,它通常表示如果基类知道其子类的私密细节(如名称),则结构存在问题;这不是通常的方式。
答案 1 :(得分:1)
也许您需要将编译时间与运行时区分开来。
在编译时,arijit的结构是众所周知的。在类的中途,在main中,使用子类并不重要,因为这是运行时的事情。
但我承认,Java编译器并不是那么愚蠢:)
答案 2 :(得分:1)
编译程序时,会形成两个.class文件,即arijit.class和amit.class。 因此,当您的程序被解释时,解释器知道两个.class文件,因此您可以创建这样的对象。
答案 3 :(得分:0)
它很简单,因为你可以在同一类类的类中创建一个对象,你也可以创建它的子类类型。
答案 4 :(得分:0)
您无法在父类中创建子类的位置在构造函数中。