黑马程序员_JAVA基础_多态的理解

------- 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("看家");
 }
}


    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值