Java中创建子类的新对象的语法含义?
下面是我在学习java教程时编写的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
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”对象。这是您在实际代码中经常看到的情况,通常您希望将实例指定给最不特定的类型,以便使代码最灵活。实例的可能重复性基本上告诉您,实例是否可以指定给类型。由于您可以将子对象分配给父对象,并且可以将实现接口的任何实例分配给接口,因此所有这些都是正确的。