多态
所谓多态,就是同一种行为在不同的对象身上有不同的表现形式
。比如:
动物都会叫,但是不同的动物叫声确是不一样的。
public class Animal {
public void back(){
System.out.println("动物叫...");
}
}
public class Cat extends Animal {
@Override
public void back() {
System.out.println("喵~");
}
}
public class Dog extends Animal {
@Override
public void back(){
System.out.println("汪~");
}
}
public class Test {
public static void main(String[] args) {
Cat cat = new Cat();
Dog dog = new Dog();
Animal animal = new Animal();
animal.back();
cat.back();
dog.back();
}
}
结果:
动物叫...
喵~
汪~
正因为有了多态性,我们周围的世界才会这么精彩。
出现多态的三个条件
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
继承
;有方法重写
;父类引用指向子类对象
//歌手类
public class Singer {
protected String name; //歌星的名字
public Singer() {
}
public Singer(String name) {
this.name = name;
}
protected void song(String songName) {
System.out.println("我是" + this.name + ",正在演唱" + songName);
}
}
//流行唱法歌星继承自歌星类,有继承
public class PopSinger extends Singer {
public PopSinger(String name) {
super(name);
}
//有方法重写
@Override
protected void song(String songName) {
System.out.println("药药,切克闹...");
super.song(songName);
}
}
//民歌唱法歌星继承自歌星类,有继承
public class NationSinger extends Singer {
public NationSinger(String name) {
super(name);
}
//有方法重写
@Override
protected void song(String songName) {
System.out.println("辣妹子辣,拉拉拉....");
super.song(songName);
}
}
//美声唱法歌星继承自歌星类,有继承
public class ArtSinger extends Singer {
public ArtSinger(String name) {
super(name);
}
//有方法重写
@Override
protected void song(String songName) {
System.out.println("啊啊啊啊啊....");
super.song(songName);
}
}
//客户类
public class Customer {
public void listenMusic(Singer singer,String songName){
singer.song(songName); //一个父类的引用singer调用了子类对象的song方法。
}
}
//测试类
public class Test {
public static void main(String[] args) {
Singer zhouDong = new PopSinger("周杰伦");
Singer song = new NationSinger("宋祖英");
Singer mao = new ArtSinger("毛阿敏");
Customer c = new Customer();
c.listenMusic(zhouDong,"传奇");
c.listenMusic(song,"传奇");
c.listenMusic(mao,"传奇");
}
}
运行结果:
药药,切克闹...
我是周杰伦,正在演唱传奇
辣妹子辣,拉拉拉....
我是宋祖英,正在演唱传奇
啊啊啊啊啊....
我是毛阿敏,正在演唱传奇
总结
- 封装,继承,多态是面向对象的三大特征,其中多态是真正面向对象的精髓,理解了多态才能理解什么是真正的面向对象。
- 多态就是同一行为在不同对象身上有不同的表现形式;
- 出现多态的三个条件:
- 1.有继承;
- 2.有方法重写;
- 3.父类引用指向子类对象;
新手小白,如有错误欢迎大家指正。