首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中创建子类的新对象的语法意义?

在Java中创建子类的新对象的语法意义?
EN

Stack Overflow用户
提问于 2015-02-22 01:29:38
回答 2查看 616关注 0票数 0

下面的java程序是我在阅读java教程时编写的。

代码语言:javascript
复制
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{}

如您所见,我创建了一个类Parent、一个接口Interface1和一个子类Child,它扩展了Parent并实现了Interface1

不过,我对以下声明表示怀疑:

代码语言:javascript
复制
 Parent obj1 = new Child();

在这种情况下,obj1是ParentChild的一个实例?上述声明的真正含义是什么?Parent obj1的意思是什么,在=的左边是什么,new Child()的意思是什么,它在=的右边。Parent obj1 = new Child();作为一种陈述的含义是什么?

下面是程序的输出。

代码语言:javascript
复制
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都是ParentChildInterface1的实例。Parent这个词在创建obj1的过程中没有起到任何作用吗?在创建Parent时编写obj1的意义是什么?

我发现很难用语言表达,但我希望你能理解我的问题。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-22 01:33:45

在这种情况下,obj1是父或子的实例吗?

这是一个孩子的例子,也是一个家长的例子。

上述声明的真正含义是什么?

obj1 1是一个子实例,正如您定义的那样,所有的obj1实例也都是父实例,所以也是父实例。

父obj1的含义是什么,它位于=的左侧,新的Child()在=的右侧是什么意思。作为语句,父obj1 = new ()的含义是什么?

Parent obj1意味着obj1是一个局部变量,可以保存作为父实例的任何对象。构建一个子对象意味着它实际上可以被分配,因为所有的Child对象都是Parent的。

在创建obj1时,父词不是起了什么作用吗?

是的,如果向Child中添加一个方法,而不是向Parent中添加一个方法,您将无法在obj1上调用它,因为obj1可以保存任何父级,而不仅仅是一个子级。

在创建obj1时编写父母的意义是什么?

它允许存储任何Parent,即使不是Child

以下类的命名(作为一个类推)也许更有意义:

代码语言:javascript
复制
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");}
}
票数 1
EN

Stack Overflow用户

发布于 2015-02-22 01:41:24

当将对象分配给名称时,如下所示:

代码语言:javascript
复制
Parent p = new Child();

名称'p‘指的是'Child’对象,尽管名称上说它是父对象。这是相当常见的,尽管在示例中选择类型名称可能会产生误导。一个更好的现实世界的例子是:

代码语言:javascript
复制
List a = new ArrayList();

在本例中,您是通过更通用的“List”引用特定的“ArrayList”对象。这是您在实际代码中经常看到的东西,通常您希望分配给最不特定的类型,以便使您的代码最灵活。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28653476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档