Java面对对象的三大特征及理解其一:多态
多态的概念:
多态性就是允许将父对象设置成为一个或更多与自身子对象相等的技术,赋值之后父对象就可以根据当前赋值给自身子对象的特性以不同的方式运作,java中多态性可以把不同的子类对象都当作父类来看,从而屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
多态的实现前提:
- 继承的存在(没有继承就没有多态)
- 子类重写父类的方法 (多态向下会调用子类重写后的方法)
- 父类引用变量指向子类对象。(涉及子类到父类的类型转换)
多态的优势:
- 消除类型之间的耦合关系
- 可替换性
- 可扩充性
多态的使用:
向上转型:
Animal dog = new Dog();
将一个父类的引用指向一个子类对象,成为向上转型,自动进行类型转换。此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,而不是父类的方法此时通过父类引用变量无法调用子类特有的方法。
向下转型:
Dog dog1 = (Dog) dog;
将一个指向子类对象的引用赋给一个子类的引用,成为向下转型,此时必须进行强制类型转换。向下转型必须转换为父类引用指向的真实子类类否则出现,“Incompatible types. Found: ‘Cat’, required: ‘Dog’”
代码演示:
接口:
public interface Animal {
void eat();
void sleep();
}
猫类实现Animal接口:
public class Cat implements Animal{
@Override
public void eat() {
System.out.println("加菲猫在吃披萨");
}
@Override
public void sleep() {
System.out.println("加菲猫在睡午觉");
}
}
狗类实现接口:
public class Dog implements Animal {
@Override
public void eat() {
System.out.println("闪电狗在吃骨头");
}
@Override
public void sleep() {
System.out.println("闪电狗在睡觉觉");
}
}
测试类:
public class Animal_Test {
public static void main(String[] args) {
Animal dog = new Dog();
dog.eat();
dog.sleep();
Dog dog1 = (Dog) dog;
dog1.eat();
Animal cat = new Cat();
cat.eat();
cat.sleep();
}
}
运行结果:
闪电狗在吃骨头
闪电狗在睡觉觉
闪电狗在吃骨头
加菲猫在吃披萨
加菲猫在睡午觉