Java中创建子类的新对象的语法含义?

Java中创建子类的新对象的语法含义?,java,class,interface,instance,parent-child,Java,Class,Interface,Instance,Parent Child,下面是我在学习java教程时编写的java程序 public class Primitive_prac { public static void main(String[] args) { // TODO code application logic here Parent obj1 = new Child(); Child obj2 = new Child(); System.out.println("ojb1 is instance of Pare

下面是我在学习java教程时编写的java程序

public class Primitive_prac {

   public static void main(String[] args) {
    // TODO code application logic here

    Parent obj1 = new Child();
    Child obj2 = new Child();

    System.out.println("ojb1 is instance of Parent: " + (obj1 instanceof Parent));
    System.out.println("ojb1 is instance of Parent: " + (obj1 instanceof Child));
    System.out.println("ojb1 is instance of Parent: " + (obj1 instanceof Interface1));

    System.out.println();

    System.out.println("ojb2 is instance of Parent: " + (obj2 instanceof Parent));
    System.out.println("ojb2 is instance of Parent: " + (obj2 instanceof Child));
    System.out.println("ojb2 is instance of Parent: " + (obj2 instanceof Interface1));

    }
}

class Parent{}
interface Interface1{}
class Child extends Parent implements Interface1{}
如您所见,我创建了一个类
父类
,一个接口
接口1
,以及一个子类
子类
,该子类扩展了
父类
,并实现了
接口1

然而,我对以下声明有疑问:

 Parent obj1 = new Child();
在这种情况下,obj1是
父项
子项
的实例?这句话到底是什么意思?
=
左侧的
父对象j1
的含义是什么?右侧的
新子对象()
的含义是什么。
Parent obj1=new Child()的含义是什么作为语句

下面是程序的输出

run:
ojb1 is instance of Parent: true
ojb1 is instance of Parent: true
ojb1 is instance of Parent: true

ojb2 is instance of Parent: true
ojb2 is instance of Parent: true
ojb2 is instance of Parent: true
BUILD SUCCESSFUL (total time: 0 seconds)
我有点困惑,因为输出显示obj1和obj2都是
Parent
Child
Interface1
的实例。创建obj1时,父项的
单词没有任何区别吗?在创建obj1时编写
Parent
的意义是什么

我发现很难用语言表达,但我希望你明白我的问题

谢谢

在这种情况下,obj1是父对象还是子对象的实例

它是子实例,也是父实例

这句话到底是什么意思

obj1是一个子对象,正如您定义的,所有子对象的实例都是父对象的实例,因此obj1也是父对象的实例

=左侧的父对象J1的含义是什么?右侧的新子对象()的含义是什么。父对象J1=新子对象()的含义是什么;作为声明

Parent obj1
表示
obj1
是一个局部变量,可以保存作为Parent实例的任何对象。构造子对象的事实意味着它实际上可以被赋值,因为所有
Child
对象都是
Parent
s

创建obj1时,父单词没有任何区别吗

是的,如果您将方法添加到
Child
而不是
Parent
,您将无法在
obj1
上调用它,因为
obj1
可以容纳任何父对象,而不仅仅是子对象

创建obj1时编写父对象的意义是什么

它允许存储任何
父项
,即使不是
子项

也许下面的类命名(作为类比)更有意义:

public class Primitive_prac {

   public static void main(String[] args) {
    // TODO code application logic here

    Animal obj1 = new Bird();
    Bird obj2 = new Bird();
    obj1.move(); //valid, since obj1 is declared `Animal`
    obj1.fly(); // invalid, since obj1 could be any animal and not all animals implement fly();
    obj2.move(); // Valid, all birds are animals and all animals (as defined here) move, therefore birds can move
    obj2.fly(); //valid, obj2 can only be a bird or a subclass, and all such objects can fly()

    System.out.println("ojb1 is instance of Animal: " + (obj1 instanceof Animal));
    System.out.println("ojb1 is instance of Bird: " + (obj1 instanceof Bird));
    System.out.println("ojb1 is instance of Flying: " + (obj1 instanceof Flying));

    System.out.println();

    System.out.println("ojb2 is instance of Bird: " + (obj2 instanceof Animal));
    System.out.println("ojb2 is instance of Animal: " + (obj2 instanceof Bird));
    System.out.println("ojb2 is instance of Flying: " + (obj2 instanceof Flying));

    }
}

class Animal{ void move("Moving...") {} }
interface Flying{ void fly(); }
class Bird extends Animal implements Flying{
    void fly() {System.out.println("flap flap");}
}

将对象指定给名称时,如中所示:

Parent p = new Child();
名称“p”指的是一个“子”对象,即使该名称表示它是父对象。这是很常见的,尽管示例中类型名称的选择可能会产生误导。一个更好的现实例子是:

List a = new ArrayList();

在本例中,您通过更通用的“列表”引用特定的“ArrayList”对象。这是您在实际代码中经常看到的情况,通常您希望将实例指定给最不特定的类型,以便使代码最灵活。

实例的可能重复性基本上告诉您,实例是否可以指定给类型。由于您可以将子对象分配给父对象,并且可以将实现接口的任何实例分配给接口,因此所有这些都是正确的。