15.Java-多态

多态的产生
Animal a = new Dog();
//此时就产生了多态
上述代码对象A具有两种类型

编译类型:声明对象变量的类型Animal,表示把对象看出什么类型.

运行类型:对象的真实类型Dog,运行类型--->对象的真实类型.

++编译类型必须是运行类型的类型/或相同.++

++当编译类型和运行类型不同的时候,多态就出现了.++

所谓多态:对象具有多种形态,对象可以存在不同的形式.

Animal a = null;
       a = new Dog();//此时a表示Dog类型.
       a = new Cat();
多态的前提:

可以是继承关系(类和类)/也可以是实现关系,也可以是实现关系(接口和实现类),在开发中多态一般都指第二种.

字段不存在多态.

当子类和父类存在相同字段的时候,无论修饰符是什么(即使pricate),都会存在各自的内存空间中存储数据.

示例代码
class Person
{
    String name = "Person";
    void say(){
        System.out.println("hello");
    }
}

class Student extends Person
{
    String name = "Student";
    void work(){
        
    }
}

public class Test {
    public static void main(String[] args) {
        
        Person s = new Student();
        System.out.println(s.name);//Person
        
        Student s1 = new Student();
        System.out.println(s1.name);//Student

    }
}

通过上述代码,我们可以知道,通过对象调用字段,在编译时期就已经决定了调用哪一块内存空间的数据.

---->字段不存在覆盖的概念,在多态时,不能有多态特征(在运行时期体现子类特征).

只有方法才有覆盖的概念

你可能感兴趣的:(15.Java-多态)