【Java】第八节 多态

旧城冷巷雨未停 提交于 2019-12-02 14:53:31
  • Java引用变量有两种类型,分别是编译时类型和运行时类型:编译时类型由声明该变量时使用的类型决定;运行时类型由实际赋给该变量的对象。如果编译时类型和运行时类型不一致,就可能出现所谓多态。
  • 如果子类没有重写父类的方法或者没有调用重写的方法,那么不会出现多态。
  • 出现多态的条件有三个:继承、重写、调用
  • 多态:多态是一种现象,描述的是父类类型的变量指向子类的实例化对象,在调用父类中被子类重写的方法时,在编译时指向的是父类中被子类重写的方法,而在运行时则指向子类中重写父类的方法,例:
    class Animal{
    	public void howl() {
    		System.out.println("动物吼叫。。。");
    	}
    }
    class Dog extends Animal{
    	@Override
    	public void howl() {
    		System.out.println("汪汪汪汪。。。");
    	}
    }
    public class Test {
    	public static void main(String[] args) {
    		Animal dog = new Dog();
    		dog.howl();		//运行结果:汪汪汪汪。。。
    	}
    }
    
  • 因为变量dog的类型是Animal类,在编译时不会创建对象,因此使用变量dog调用的howl()方法指向的是Animal类中的howl()方法
  • 运行时,关键字new在堆中创建了一个Dog实例化对象,然后又把该对象的地址赋值给了变量dog,因此dog指向的其实是刚刚产生的Dog的实例化对象,调方法howl()用的howl()方法时也就自然是Dog中的howl()方法
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!