在PHP中,要创建一个新对象,你可以做这样的事情$dog = new Dog;.但是在Java中,你会做类似的事情,Dog x = new Dog;或者Dog x;.有人可以解释为什么你需要在变量前面说Dog类吗?
你需要精确的类型,因为Java是一个强大的和静态类型语言.
如果你声明x的狗,它只能是狗或子类犬.
另一个例子 :
public class Animal {
}
public class Dog extends Animal {
}
public class Cat extends Animal {
}
Run Code Online (Sandbox Code Playgroud)
以下代码有效,因为x声明为Animal,它可以是Dog或Cat,或Animal的任何子类:
Animal x;
x = new Dog();
x = new Cat();
Run Code Online (Sandbox Code Playgroud)
Java静态和明确地键入.
由于继承,变量的类型可能与它所拥有的值的类型不同.例如:
Animal dog = new Dog();
Run Code Online (Sandbox Code Playgroud)
这里dog 变量的类型是Animal,但它保存的值是对实例的引用Dog.
现在在其他一些语言中(C#3是作为Java的近邻的明显示例),当您确实希望局部变量的类型与用于初始化它的表达式的类型相同时,可以使用隐式类型的局部变量:
var dog = new Dog(); // Equivalent to Dog dog = new Dog();
Run Code Online (Sandbox Code Playgroud)
(其他一些静态类型语言的类型推断功能远不止于此.)
那么,回到原来的问题,答案是:
dog变量具有在编译时已知的类型; 在PHP中不是这样