在Java问题中创建对象

在Java问题中创建对象,java,Java,在PHP中,要创建一个新对象,可以执行如下操作,$dog=newdog。但在Java中,您可以执行如下操作,dogX=newdog或狗x。有人能解释一下为什么需要在变量前面说Dog类吗?在Java中,您可以这样调用构造函数(如果它没有参数): 通过在变量前面写类名,可以告诉Java变量x的类型是Dog。这允许Java在编写以下代码时发现您做错了什么: Dog x = new Cat(); 见: PHP是一种松散类型的语言 在PHP中,不需要指定变量 在向其添加值之前声明 在上面的示例中,您可以

在PHP中,要创建一个新对象,可以执行如下操作,
$dog=newdog。但在Java中,您可以执行如下操作,
dogX=newdog或<代码>狗x。有人能解释一下为什么需要在变量前面说Dog类吗?

在Java中,您可以这样调用构造函数(如果它没有参数):

通过在变量前面写类名,可以告诉Java变量
x
的类型是
Dog
。这允许Java在编写以下代码时发现您做错了什么:

Dog x = new Cat();
见:

PHP是一种松散类型的语言

在PHP中,不需要指定变量 在向其添加值之前声明

在上面的示例中,您可以看到 不必告诉PHP哪些数据 输入变量为

PHP自动转换 变量设置为正确的数据类型, 取决于它的价值

在强类型编程中 语言,您必须声明(定义) 变量的类型和名称 在使用它之前

在PHP中,变量是声明的 当你使用它的时候自动的


我认为这是因为Java是严格类型化的。您需要在编译时输入对象的类型。

您需要精确输入类型,因为Java是一种strong静态类型化语言

如果将
x
声明为,则它只能是的子类

另一个例子:

public class Animal {
}

public class Dog extends Animal {
}

public class Cat extends Animal {
}
以下代码有效,因为
x
声明为动物,它可以是,或动物的任何子类:

Animal x;
x = new Dog();
x = new Cat();
Java是静态和显式类型的

由于继承的原因,变量的类型可能与它所持有的值的类型不同。例如:

Animal dog = new Dog();
这里,
dog
变量的类型是
Animal
,但它所持有的值是对
dog
实例的引用

现在在一些其他语言中(C#3是Java近邻的明显例子),当您实际希望局部变量的类型与用于初始化它的表达式的类型相同时,可以使用隐式类型的局部变量:

var dog = new Dog(); // Equivalent to Dog dog = new Dog();
(其他一些静态类型语言的类型推断功能远远超出此范围。)

回到你原来的问题,答案是:

  • dog
    变量的类型在编译时已知;这在PHP中是不正确的
  • 变量的类型必须在Java中明确说明;这与静态类型相关,但不是静态类型的要求

这是用于创建类的对象的java语法,也称为创建实例

例如,
Dog-adog
其中,
adog
Dog
类型的参考变量

Dog adog=新狗()
其中
adog
Dog
类型的参考变量,它现在引用内存中的
Dog
对象


使用点(.)操作符访问对象的实例变量和方法。

您的类名object name=new class name(); 比如说

动物类(){

//你的代码 }


动物狗=新动物()

看来你也喜欢猫和狗;)+1为好,完整的答案。我只想补充一点,变量的类型也可以是一个接口,只要“new”之后的类实现了这个接口。可以有一种强大的静态类型语言,不需要您声明两次类型(例如Scala)。我认为更准确的答案是你所说的加上“…Java在类型推断方面做得很少。”因为php,嗯。。。s**ks。(高度主观)
var dog = new Dog(); // Equivalent to Dog dog = new Dog();