- 一、掌握多态的优势和应用场合
软件开发有一个标准的规范流程:开闭原则。对扩展开放,对修改关闭。
频繁修改代码,代码可扩展性、可维护性差,使用多态优化设计
任何一个对象都会有类型,当等号两侧变量的类型和对象类型不一致时,就有可能产生多态现象了
多态用文字来解释就是:父类的引用变量直接指向子类对象
多态应用的两种情况:
- 有继承关系
- 实现接口(将接口看做实现类的父类,实现就是变相的继承)
使用多态的原因:为了达到程序的灵活性,才使用了多态技术
//一个对象有多种表现形态就叫多态
Dog d = new Dog();
Pet p = new Dog();
多态技术是面向对象的核心
多态重点指对象,与简单数据类型没有关系
- 多态—就是指对象在程序中表现的多种形态
- Java中,对象变量是多态的。
- 多态产生的条件:只有出现继承或实现某个接口时才会产生多态
- 一个类型为Person的变量既可以指向类型为Person的对象,又可以指向Person的任何子类的对象 (例如:同样是人,英国人说英语,中国人说汉语)
- 以多态的形式来传递参数,增强了参数类型的灵活性
- 一个对象只能有一种确切的数据类型
- 一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法。
实现多态的两个要素: 1. 方法重写 2. 使用父类类型
多态的好处:提高程序的灵活性,提高程序后期的可维护性
- 二、掌握父类和子类之间的类型转换
Person p = new Student();//多态使用
Student s = (Student)p;//强制转换
- 三、掌握instanceof运算符的使用
对象 instanceof 类或接口
- 该运算符用来判断一个对象是否属于一个类或者实现了一个接口,结果为true或false
- 在强制类型转换之前通过instanceof运算符检查对象的真实类型,可以避免类型转换异常,从而提高代码健壮性
- 使用运算符instanceof可以得到对象的类型
- instanceof只是判断对象是否是某种类型,不能判断对象的实际类型。(多态环境下)
- 对象的实际类型获取方法:对象.getClass()
- 四、使用父类作为方法形参实现多态
class Person {
String name;
int age;
public void eat() {
System.out.println("person eating with mouth");
}
public void sleep() {
System.out.println("sleeping in night");
}
}
class Chinese extends Person {
public void eat() {
System.out.println("Chinese eating rice with mouth by chopsticks");
}
public void shadowBoxing() {// 练习太极拳
System.out.println("practice dashadowBoxing every morning ");
}
}
class English extends Person {
public void eat() {
System.out.println("English eating meat with mouth by knife");
}
}
class TestEat{
public static void main(String[] args) {
showEat(new Person());
showEat(new Chinese());
showEat(new English());
}
public static void showEat(Person person) {
person.eat();
}
// public static void showEat(Chinese chinese) {
// chinese.eat();
// }
// public static void showEat(English english) {
// english.eat();
// }
}
- 重写与重载