java 方法有多态,变量没有多态。对嘛
时间: 2023-07-19 12:53:19 浏览: 51
Java 中的方法确实具有多态性,这是因为 Java 支持方法重载和方法重写(覆盖),这两种方式都可以实现多态。方法重载指的是在同一个类中定义多个方法,它们具有相同的名称但参数列表不同,因此可以根据传入的参数类型自动匹配调用对应的方法。而方法重写指的是在子类中重新定义一个与父类中同名、同参数列表和同返回值类型的方法,从而覆盖父类中的方法。这两种方式都是实现多态的方法。
相反,Java 中的变量没有多态性。一个变量的类型是在定义时确定的,并且它不能改变。因此,一个变量只能引用与其类型相同或子类型的对象。这种行为称为静态绑定。这意味着如果你定义一个类型为 `Animal` 的变量并将其引用一个 `Cat` 对象,你只能调用 `Animal` 类型中定义的方法,而不能调用 `Cat` 类型中特有的方法。
相关问题
java多态中变量和方法
在Java的多态中,变量和方法都可以体现多态的特性。
1. 变量多态:在多态中,变量可以根据实际对象的类型来引用不同类型的对象。例如,有一个父类 Animal 和两个子类 Dog 和 Cat,可以使用 Animal 类型的变量来引用一个 Dog 或者 Cat 对象。这样做的好处是可以通过父类类型的变量来统一处理不同的子类对象。
2. 方法多态:在多态中,方法在运行时会根据实际对象类型的不同而表现出不同的行为。例如,有一个父类 Animal 和两个子类 Dog 和 Cat,它们都有一个 eat() 方法。通过父类类型的变量来调用 eat() 方法时,实际上会根据对象的类型调用对应子类的 eat() 方法。这种方式可以提高代码的灵活性和可扩展性。
总结起来,Java的多态机制允许使用父类类型的变量引用子类对象,从而实现对不同类型对象的统一处理,并且方法调用时会根据实际对象类型来选择执行对应的方法。这种特性可以提高代码的可维护性和扩展性。
java继承和多态之成员变量隐藏
在Java中,当子类中定义了与父类同名的成员变量时,子类的成员变量会隐藏父类的成员变量,也就是说在子类中无法直接访问父类的同名成员变量。
例如:
```java
class Animal {
String name = "Animal";
}
class Dog extends Animal {
String name = "Dog";
}
public class Test {
public static void main(String[] args) {
Animal animal = new Dog();
System.out.println(animal.name);
}
}
```
输出结果为:
```
Animal
```
这是因为在`Dog`中定义了一个同名的成员变量`name`,因此在`Dog`对象中访问`name`时,优先访问`Dog`中的成员变量,而不是`Animal`中的成员变量。
如果想访问父类中被隐藏的成员变量,可以使用`super`关键字进行访问:
```java
class Animal {
String name = "Animal";
}
class Dog extends Animal {
String name = "Dog";
public void print() {
System.out.println(super.name);
}
}
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
dog.print();
}
}
```
输出结果为:
```
Animal
```
在`Dog`的`print`方法中使用了`super.name`访问了父类中被隐藏的成员变量`name`。