`

Java学习 之 多态

阅读更多

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ssyyll/archive/2008/10/28/3170405.aspx

 

多态可以分为变量的多态,方法的多态,类的多态.我这里强调的是类的多态,这是我们在以后的工作中经常回用到的

首先,有这样一个系统:有个学生工作从达内毕业了,作的还不错.买了辆捷达汽车.这个系统应该如何设计呢?
按照OO的思想,我们会抽象出来一个类,表示捷达汽车,其中有个run()方法

public class JD{
public void run(){
       System.out.println("JD在以120迈的速度在run");
}
}

 


我们还会抽象出一个类,来代表人.其中有个drive()方法,需要一个汽车类型作为参数,我们先传入一个JD类型的参数

// 这是我们的核心业务类

public class Person{
public void drive(JD jd){
       jd.run();
}

public static void main(String args[]){
   Person p =new Person();
   JD jd = new JD();
   p.drive(jd);
}
}

 

 

如果你写出这样的代码的话,恭喜你!你中大奖了!---------------------你会被项目经理砍死的!!!!!!!

项目经理为什么会砍你呢?
因为你写的代码偶合性太强了!

如果我们的需求变了,这个学生后来更有钱了,买了一两Benz.那么我们以前的系统怎么办啊.不要指望你作的系统永远不会变化
我们的系统只能修改!这就是项目经理砍你的原因
我们的系统会增加一个Benz类,也有个run()方法

 

public class Benz{
public void run(){
       System.out.println("Benz在以200迈的速度在run");
}
}

 

 

我们的核心业务类也要修改

 

public class Person{

    /*
public void drive(JD jd){
       jd.run();
}
*/

public void drive(Benz b){
       b.run();
}

public static void main(String args[]){
   Person p =new Person();
   Benz b = new Benz();
   p.drive(b);
}
}

 

 

以后的情况,我们可以把车抽象出来:

public abstract class Driver{
   /*属性*/
   public void run();//让子类来运行
}

public Benz extends Driver{
   public void run(){
System.out.println("Benz在以200迈的速度在run");
   }
}
public JD extends Driver{
   public void run(){
System.out.println("JD is running...");
   }
}

public class Person{
private Driver driver;
public Person(){

}
public Person(Driver driver){
   this.driver = driver;
}
public void drive(){
       driver.run();
}
public void setDriver(Driver driver){//运用参数多态,以后不管买什么车都可以
   this.driver = driver;
}


public static void main(String args[]){
   Person p =new Person();
   JD jd = new JD();//刚开始没钱就买辆JD吧
   p.setDriver(jd);
   p.driver();
   Benz benz = new Benz{();//有钱换车了
   p.setDriver(benz);
   p.driver();
}
}

 

 

什么是多态?
简单的说:就是用基类的引用指向子类的对象

提问:多态可以用在什么地方呢?
回答:可以用在方法的参数中和方法的返回类型中

其中方法的参数楼上的兄弟已经给出了代码.我这里给出在方法的返回类型中如何使用多态

上面的例子中,不管是JD还是Benz都是我们自己直接new出来的.我们可以设计一个工厂类,专门生成汽车

/**
*   我们将多态使用在方法的返回类型中
*   Car可以是抽象类,也可以是接口,JD和Benz分别继承该类或实现该借口
*/
public class CarFactory{
public Car factory(String carName){
   if(carName.equals("JD")){
      return new JD();
   }else if(carName.equals("Benz")){
      return new Benz();
   }else{
      System.out.println("对比起,不伺候");
      return null;
   }
}
}

 这实际上就是设计模式中的简单工厂模式!

另外,我我们在JDK中可以大量的看到多态的应用,比如在Object类中的equals(Object obj)方法中,参数是个Object

类型的参数.因为Object是Java中所有类的基类.,但是才传入参数的时候,可以传入任何一个类的对象
这就是多态的应用!

使用多态可以解决项目中紧偶合的问题,提高程序的课扩展性.是OCP原则的一个具体的实现


分享到:
评论

相关推荐

    Java基础之多态ppt

    Java基础之多态课程PPT适用于基础学习者使用,很好的课程资源

    java继承和多态PPT教案学习.pptx

    Java继承和多态PPT教案学习 本PPT教案主要讲解了Java中的继承和多态机制,包括继承、里式代换原则、多态和动态绑定、方法重载、重载构造函数和方法覆盖等概念。 继承是面向对象编程的基本机制之一,允许一个类继承...

    java继承、多态的简单程序.zip

    Java编程语言是面向对象的,其中继承和多态是核心概念。...这个压缩包中的简单程序,结合博客资料,为初学者提供了一个很好的学习起点,帮助他们掌握这些核心概念,并为后续的Java编程打下坚实基础。

    java继承与多态

    ### Java继承与多态知识点详解 #### 一、引言 在面向对象编程语言中,继承和多态是非常重要的概念。...掌握这两个概念对于深入学习Java编程至关重要。希望本文能够帮助读者更好地理解和运用这些概念。

    java学习资料-Java继承和多态

    Java 继承和多态是面向对象编程中的核心概念,它们是Java中实现代码复用和灵活设计的关键机制。在Java中,继承允许一个类(子类)从另一个类(父类)继承特性,而多态则使得不同类型的对象能够共享相同的操作。 ###...

    头歌之学习-Java继承和多态之接口.rar

    里面的内容为: 第1关:学习-Java继承和多态之接口

    深入Java核心 Java中多态的实现机制编程资料

    ### 深入Java核心:Java中多态的实现机制 多态性是面向对象编程中的一个重要概念,它使得程序代码具有高度的灵活性和可扩展性。...多态是Java面向对象编程的核心概念之一,掌握好它对于编写高质量的Java程序至关重要。

    北大青鸟javaOOP多态Ch03作业全集.rar

    "北大青鸟javaOOP多态Ch03作业全集.rar"这个压缩包文件很显然是针对学习者提供的一系列关于Java多态性的练习和案例,帮助学生深入理解并掌握这一核心技能。 多态性是面向对象三大特性之一,另外两个是封装和继承。...

    java继承与多态PPT教案学习.pptx

    Java继承与多态知识点 Java继承与多态是面向对象编程语言的重要概念,本文将对Java继承与多态进行详细的介绍和解释。 一、继承的含义 继承实际上是存在于面向对象程序中的两个类之间的一种关系。当一个类获取另一...

    源代码+报告-Java的继承和多态编程

    它帮助学习者理解如何定义类、创建对象、使用继承来构建类的层次结构,以及如何通过多态来实现代码的灵活性和可扩展性。此外,还强调了异常处理的重要性,确保程序在遇到错误输入时能正常运行。

    java中实现多态的机制Java系列2021.pdf

    在Java编程语言中,多态是面向对象编程的核心概念之一,它允许我们通过共通接口调用不同对象的行为。多态可以实现代码的可扩展性和可维护性,提升程序的灵活性和复用性。本篇文档将详细介绍Java中实现多态的机制,...

    Java 多态应用,掌握多态

    通过学习和实践上述知识点,开发者可以更好地理解和运用Java中的多态特性,编写出更加高效、可维护的代码。对于给定的压缩包文件"com多态",可能包含了相关的示例代码或者练习,这些可以帮助你更直观地理解并掌握...

    Java的多态.md

    Java的多态是学习Java的第一个重点,也是一个难点。在学习Java多态之前, 要学好封装和继承,封装和继承是理解多态的一个过程。在表现多态时,同 时也体现了封装和继承。

    java 多态实例

    在Java编程语言中,多态性(Polymorphism)是面向对象编程的三大特性之一,另外两个是封装和继承。多态性允许我们使用一个接口来代表多种不同的类,这使得代码更加灵活,易于扩展。在这个实例中,我们将探讨如何通过...

    Java-多态--学习笔记.docx

    Java中的多态性是面向对象编程的一个核心特性,它允许我们设计更加灵活和可扩展的代码。在Java中,多态性(Polymorphism)主要体现在两个方面:方法的重写(Overriding)和接口的实现(Interface Implementation)。...

    java的多态扩展性

    java教学视频,讲解了多态的扩展性、转型、成员特点、主板实例、object类等

    java多态机制

    ### Java多态机制详解 #### 一、引言 多态是面向对象编程的重要特性之一,它使得程序设计更加灵活且易于扩展。Java作为一种广泛使用的面向...通过本文的学习,希望能帮助读者更好地理解和掌握Java多态的相关知识。

    多态表现(java)

    多态的列子其中涉及到封装是java适应于java初学者学习和模仿,

    Java基础多态PPT教学课件.pptx

    Java基础多态PPT教学课件.pptx

    JAVA封装继承与多态PPT教案学习.pptx

    JAVA 封装继承与多态 PPT 教案学习 JAVA 封装继承与多态是面向对象程序设计语言中三个重要的概念,本文将对这三个概念进行详细的解释。 一、封装 封装是指隐藏对象的内部细节,使对象外部不能随意存取对象的内部...

Global site tag (gtag.js) - Google Analytics