Skip to content

Latest commit

 

History

History
executable file
·
99 lines (72 loc) · 1.98 KB

Java多态.md

File metadata and controls

executable file
·
99 lines (72 loc) · 1.98 KB
id title
Java多态
13.7 Java多态

多态

多态是一个相对抽象的概念,它体现在同一类型的对象调用同一方法却得到不同的响应结果上。

多态可分为:

  • 编译时多态(设计时多态):方法重载;
  • 运行时多态:程序在运行时才知道调用哪个方法。一般多态指的都是运行时多态。

运行时多态的必要条件:

  • 满足继承(实现)关系;
  • 父类引用(变量)指向不同的子类实例。

具体看代码:

Animal 类:

public class Animal {
	
	// 方法:吃东西
	public void eat() {
		System.out.println("动物都有吃东西的能力");
	}
}

Cat类:继承Animal

public class Cat extends Animal {

	// 方法:跑动
	public void run() {
		System.out.println("小猫快乐地奔跑");
	}

	// 重写父类方法:eat()
	@Override
	public void eat() {
		System.out.println("猫吃鱼~~~");
	}
}

Dog类:继承Animal

package com.imooc.animal;

public class Dog extends Animal {
	// 方法:睡觉
	public void sleep() {
		System.out.println("小狗爱睡觉");
	}

	// 重写父类方法:eat()
	@Override
	public void eat() {
		System.out.println("狗吃肉~~~");
	}
}

Test类:

public class Test {

	public static void main(String[] args) {
		Animal animal = new Animal(); // 1
		// 父类引用 = 子类实例();
		Animal cat = new Cat();// 2
		Animal dog = new Dog();// 3

		animal.eat(); // 调用Animal本身的方法;
		cat.eat(); // 调用Cat中重写Animal类的方法;
		dog.eat(); // 调用Dog中重写Animal类的方法;

   		// Animal类型的cat对象实际是Cat的实例对象,所以cat可以强转成Cat类。
		Cat cat1 = (Cat) cat;
		cat1.eat();
		cat1.run();
	}
}

从上面的代码中可以看到,父类的引用可以是不同子类的实例,这就体现了Java对象的多态性。

instanceOf 关键字

instanceof 关键字用来判断左边对象是否属于右边类的实例,返回布尔值。