Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用不同的构造函数实例化类_Java_Object_Constructor - Fatal编程技术网

Java 使用不同的构造函数实例化类

Java 使用不同的构造函数实例化类,java,object,constructor,Java,Object,Constructor,假设我有一个名为class1的类和一个扩展它的类class2。我想了解下一行在实例化类对象时的含义 class1 classObjectName=new class2() 我知道我使用的是class2的构造函数,但我的问题是,如果我使用这两个类中的任何一个类的方法,这一行如何影响方法的使用 也 class1 classObjectName=new class1() class1 classObjectName=new class2() 我的问题是在这两行之后创建了多少个实例,它是来自class1

假设我有一个名为
class1
的类和一个扩展它的类
class2
。我想了解下一行在实例化类对象时的含义

class1 classObjectName=new class2()

我知道我使用的是
class2
的构造函数,但我的问题是,如果我使用这两个类中的任何一个类的方法,这一行如何影响方法的使用

class1 classObjectName=new class1()

class1 classObjectName=new class2()

我的问题是在这两行之后创建了多少个实例,它是来自class1还是class2


谢谢

我举了一个例子,展示了一些行为。当指定为父实例时,子实例将失去对其特定于子实例的方法和数据的访问权,但会保留数据。这意味着,如果您将其投射回子对象,它将再次作为子对象使用

主要内容:

家长:

public class ClassParent
{
   
}
儿童:

public class ClassChild extends ClassParent
{
  public String childValue;
  
  public ClassChild(String value)
  {
    childValue = value;
  }
  
  public void ChildMethod()
  {
    
  }
}

只是吹毛求疵:Java命名约定有以大写字母(Class1)开头的类。如果您实例化ClassChild并将其分配给ClassParent的变量,它将生成ClassParent类型的变量。这意味着在ClassChild中声明的任何方法都将不可用,因为编译器将其视为ClassParent类型。因此,如果我正确获得它,我已经实例化了2个对象
class1
class2
,对吗
class1
class1
的一种,而
class2
class
的一种,非常感谢您的详细说明。至于我的另一个问题,我将从你的例子中学习。
ClassParent=newclasschild(“Child”)在那一行中,实例是来自ClassChild还是ClassParent?@AmrMahmoud它仍然是ClassChild的实例,但被编译器视为ClassParent。这就是为什么它在尝试访问ClassChild方法/数据时抛出错误,但仍然保留该数据,从而允许将其强制转换回ClassChild。这也是为什么您可以使用运算符将其标识为实际的ClassChild。@AmrMahmoud我在Main方法中添加了一行,以说明我使用
instanceof
确认它仍然是ClassChild的实例的意思。非常感谢您的帮助。备受赞赏的人
public class ClassChild extends ClassParent
{
  public String childValue;
  
  public ClassChild(String value)
  {
    childValue = value;
  }
  
  public void ChildMethod()
  {
    
  }
}