本章介绍多态
多态就是一个行为有多个不同的表现形式.比如打印机,同样是打印的动作它分为彩印和黑白印等.同样是插usb接口,有的是为了传输文件,有的为了充电等。
1,多态在代码中如何体现?
(1)接口
接口相关文章点这
接口就是典型的一种多态体现.
有这么一个动物接口.动物有很多行为,吃,动之类的.但是每种动物的表现形式不太一样.比如鸟啄着吃,狗咬着吃等。
public interface Animal {
void eat();//动物都会吃,但是每种动物吃东西的方法不太一样。
}
public class Dog implements Animal{
@Override
public void eat() {
System.out.println("狗咬着吃");
}
}
public class Bird implements Animal{
@Override
public void eat() {
System.out.println("鸟啄着吃");
}
}
这样就能够体现出JAVA的对象多态性.同样是吃的行为,但是它有多种表现形式,有的啄着吃,有的咬.
(2)继承一个有抽象方法的抽象类
抽象类和抽象方法相关文章在这
继承抽象类重写抽象方法也是很典型的一种JAVA对象多态性的体现.
public abstract class Animal {//有抽象方法的抽象类
public abstract void eat();
}
public class Bird extends Animal{
@Override
public void eat() {//继承并重写抽象方法
System.out.println("鸟啄着吃");
}
}
动物是抽象的,它有一个吃的抽象方法。每一种动物都有不太一样的吃的行为。
执行以下代码
public static void main(String[] args) {
Animal animal = new Bird();//多态体现
animal.eat();
}
这样Animal类就有具体的吃的方法了
(3)重写
重写相关文章在这
实现接口,集成有抽象方法的抽象类.或者你要扩充父类方法的功能时你都要重写。这些都是多态的体现.
比如重写父类的一个方法,那么同样一个行为父类和子类表现的方法就不一样.
2,重载是不是多态?
重载在体现上也是一个行为不同的表现形式,但和重写有点区别.重载你在编译的时候就已经很清楚它的形式了。但是重写不一定。重写是只有在运行的时候才能确定它的表现形式。比如上面提到的Animal和Bird它们都有eat()的方法.但是系统在编译的时候并不知道会用那个eat()方法。它只管编译通过。只有在运行的时候才能知道是那个eat()方法.重写是基于对象编程的多态。
但是重载是不是多态呢?重载它符合多态的概念,一个行为不同的表现形式,但不是面向对象特性上的多态。
总结:
1,什么是多态?
一个行为不同的表现形式,比如彩印和黑白印
2,代码中如何体现?
接口,抽象类和抽象方法,重写