多态 多态注意点

子类类型赋值给父类 表现出子类特征

Person a = new Student();

a.talk();
调用 子类student方法 如没有再调用父类person的talk方法

a.getClass()
返回值是student

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class asd {

public static void main(String[] args) {
Dog dogdog = new Dog();
Person p = new Person();
p.f(dogdog);//输出dog

Animal animaldog = new Dog();
p.f(animaldog);输出dog

Animal animalanimal = new Animal();
p.f(animalanimal);/输出animal
}
}

class Animal{
void f(){
System.out.println("animal");
}
}
class Person{
void f(Animal animal){
animal.f();
}
}
class Dog extends Animal{
void f(){
System.out.println("dog");
}
}

多态性使得java编译时先到子类中寻找本类方法
当方法改为静态static方法 丧失多态性 在编译时就确定了使用的class