多态:就是方法的重载,由于参数类型的不同而导致执行方法不同的现象
允许使用一个父类类型的变量来引用一个子类类型的对象,根据被引用子类对象特征的不同,得到不同的运行结果
// 定义接口Animal
interface Animal {
void shout(); // 定义抽象shout()方法
}
// 定义Cat类实现Animal接口
class Cat implements Animal {
// 实现shout()方法
public void shout() {
System.out.println("喵喵");
}
}
// 定义Dog类实现Animal接口
class Dog implements Animal {
// 实现shout()方法
public void shout() {
System.out.println("汪汪");
}
}
// 定义测试类
public class Example13 {
public static void main(String[] args) {
Animal an1 = new Cat(); // 创建Cat对象,使用Animal类型的变量an1引用
Animal an2 = new Dog(); // 创建Dog对象,使用Animal类型的变量an2引用
animalShout(an1); // 调用animalShout()方法,将an1作为参数传入
animalShout(an2); // 调用animalShout()方法,将an2作为参数传入
}
// 定义静态的animalShout()方法,接收一个Animal类型的参数
public static void animalShout(Animal an) {
an.shout(); // 调用实际参数的shout()方法
}
}
4.4.2对象的类型转换
将子类对象当做父类的类型使用
animal an1 = new Cat( );//将子类对象Cat当做父类animal的类型来使用
animal an1 = new Dog( );
此时不能通过父类变量来调用子类中的某些方法
// 定义Animal接口
interface Animal {
void shout(); // 定义抽象方法shout()
}
// 定义Cat类实现Animal接口
class Cat implements Animal {
// 实现抽象方法shout()
public void shout() {
System.out.println("喵喵……");
}
// 定义sleep()方法
void sleep() {
System.out.println("猫睡觉……");
}
}
// 定义测试类
public class Example14 {
public static void main(String[] args) {
Cat cat = new Cat(); // 创建Cat类的实例对象
animalShout(cat); // 调用animalShout()方法,将cat作为参数传入
}
// 定义静态方法animalShout(),接收一个Animal类型的参数
public static void animalShout(Animal animal) {
animal.shout(); // 调用传入参数animal的shout()方法
animal.sleep(); // 调用传入参数animal的sleep()方法
}
}
可以将animal类型直接转换成shout类型
强制转换:
Cat cat = (Cat) animal;
然后进行直接调用