------- android培训、java培训、期待与您交流! ----------
JAVA是一种面向对象的程序语言。面向对象的特别则包括:封装、继承、多态。
多态可以理解为事物存在的多种体现形态。
在多态中成员函数的特点:
在编译时期,参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
在运行期,参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时。编译看左边,运行看右边。
1.多态的体现
父类的引用指向了自己的子类对象。
父类的引用也可以接收自己的子类对象。
2.多态的前提
必须是类与类之间的关系,要么继承,要么实现。
通常还是有一个前提:存在覆盖。
3.多态的好处
多态的出现大大的提高了程序的扩展性。
可替换性:多态对已存在的代码具有可替换性。
可扩充性:多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。
接口性:多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。
灵活性:它在应用中体现了灵活多样的操作,提高了使用效率。
简化性:多态简化了对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。值得注意的是,多态并不能够解决提高执行速度的问题,因为它基于动态装载和地址引用,或称动态绑定。
4.多态的弊端
提高了扩展性,但是只能使用父类的引用访问父类中的成员。
多态的列子:
public class Joker {
public static void main(String[] args) {
// function(new Cat());
// function(new Dog());
// Animal a = new Cat();
// Cat cat = (Cat)a;
// cat.catchMouse();
MainBord mb = new MainBord();
mb.run();
mb.usePci(new SoundCard());
}
static void function(Animal a) {
a.eat();
}
}
class SoundCard implements Pci {
@Override
public void close() {
// TODO Auto-generated method stub
System.out.println("SoundClose");
}
@Override
public void open() {
// TODO Auto-generated method stub
System.out.println("SoundPlay");
}
}
interface Pci {
public void open();
public void close();
}
class MainBord {
public void run() {
System.out.println("MainBordRun");
}
public void usePci(Pci p) {
if(p != null) {
p.open();
p.close();
}
}
}
//多态的使用
abstract class Animal {
abstract void eat();
}
class Cat extends Animal{
@Override
void eat() {
// TODO Auto-generated method stub
System.out.println("猫吃鱼");
}
void catchMouse() {
System.out.println("抓老鼠");
}
}
class Dog extends Animal{
@Override
void eat() {
// TODO Auto-generated method stub
System.out.println("啃骨头");
}
void lookHome() {
System.out.println("看家");
}
}