精华内容
下载资源
问答
  • 使用多态有什么好处?我们将根据以上五个问题展开激烈的讨论。 什么是多态?   多态,顾名思义指“多种形态”。多态表示不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行。 例:猪、狗、猫都...

      在学习《大话设计模式》的时候经常会遇到多态,但什么是多态?为什么要使用多态?什么时候用多态?多态是如何实现的?使用多态有什么好处?我们将根据以上五个问题展开激烈的讨论。

    什么是多态?

      多态,顾名思义指“多种形态”。多态表示不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行。

    例:猪、狗、猫都属于动物类,我们将动物类作为父类,猪“哼哼叫”,狗“汪汪叫”,猫“喵喵叫”,猪、狗、猫三者都能叫,但三者都要通过重写父类的方法才能实现。

    为什么要使用多态?使用多态有什么好处?

      我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。

    代码重用,也称代码复用, 就是说你把一个功能写成一个模块, 以便再次需要相同功能的时候,可以直接使用,而不用重新开发。
    举例: 假如你的网站需要验证码, 你就可以把验证码这个功能单独提取出来以便复用。
    通常代码复用是通过类与对象来实现的, 这也是面向对象编程与面向过程编程最主要的区别之一。

      作为面向对象的三大特性之一,多态也有代码重用的功能,还有解决项目中紧耦合的问题,提高程序的可扩展性·。

    举例:添加一个子类,继承父类,重写父类的方法。至此,该程序的扩展性得到了提升,而又不需要查看源代码是如何实现的就可以扩展新功能。

    什么时候用多态?

    • 方法中的参数
        class Program
        {
            static void Main(string[] args)
            {
                Person p=new Person();
                Audi audi=new Audi();
                p.setDriver(audi);
                p.drive();
                SBenz benz=new SBenz();
                p.setDriver(benz);
                p.drive();
            }
        }
    
        public abstract class Driver
        {
            public abstract void run();
        }
    
        class SBenz : Driver
        {
            public override void run()
            {
                Console.WriteLine("大奔");
            }
        }
    
        class Audi:Driver
        {
            public override void run()
            {
                Console.WriteLine("奥迪");
            }
        }
    
        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 class CarFactory
        {
            public static Driver createCar(string carName)
            {
                
                if (carName.Equals("Audi"))
                {
                    return new Audi();
                }
                else if (carName.Equals("Benz"))
                {
                    return new SBenz();
                }
                else
                {
                    Console.WriteLine("出门左拐");
                    return null;
                }
            }
        }
    

    多态是如何实现的?

    • 父类是抽象类,方法是抽象方法(没有方法体,也不能实例化),子类重写父类的方法
    • 父类中是虚方法(有方法体,能实例化),子类重写父类的方法

    小结

    • 虚方法一定要有方法体(哪怕只是大括号),抽象方法一定没有方法体
    • 虚方法可以被子类重写,抽象方法必须被子类重写
    • 如果我们不需要使用父类创建对象,它的存在只是为供子类继承。可以将父类写成抽象(关键字abstract)类,将父类的方法写成抽象方法,子类中的方法仍用关键字override重写
    • 抽象类不能被实例化
    • 多态是指类可以有多种形态,通过修改可以形成多个的实现方法。当子类从父类继承时,它会获得父类的所有方法、字段、属性和事件。若要更改父类的数据和行为,通常有两种选择,第一种是在子类的访问修饰符后加new,就是隐藏了基类(父类)的方法,第二种是在子类中重写父类的方法,更换方法里的内容。

      耐心点,坚强点,总有一天,你承受过的疼痛会有助于你,生活从来不会刻意亏欠谁,它给了你一块阴影,必会在不远的地方撒下阳光。

    展开全文
  • 什么多态? 同一操作作用于不同的对象,可以不同的解释,产生不同的执行结果,这就是多态性。简单的说:就是用基类的引用指向子类的对象。 为什么多态? "封装"通过合并特征和行为来创建新的数据类型。“实现...

    什么是多态?

    同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。简单的说:就是用基类的引用指向子类的对象。

    为什么用多态?

    "封装"通过合并特征和行为来创建新的数据类型。“实现隐藏”则通过将细节“私有化”,把接口和实现分离开来。这种类型的组织机制对那些拥有过程化程序设计背景的人来说,更容易理解,而多态的作用则是消除类型之间的耦合关系。继承允许将对象视为他自己本身的类型或其基本类型来加以处理。多态方法允许一种类型表现出于其他类型之间的区别,只要他们都是从同一基类导出即可,这种区别是根据方法行为的不同而表现出来的,虽然这些 方法都可以通过同一个基类来调用。

    多态的应用:

    1. 转型。即只要用一个基类的引用指向子类对象时,该对象会自动提升到基类的类型。
    2. 动态绑定,也就是说在如果一个派生类上升到基类之后,当调用基类中的方法时,如果该方法在派生类中被重写了,默认会调用派生类中的重写方法。
    class Cycle {
    	private String name = "Cycle";
    
    	public static void travel(Cycle c) {
    		System.out.println("Cycle.ride()" + c);
    	}
    
    	public String toString() {
    		return this.name;
    	}
    }
    
    class Unicycle extends Cycle {
    	private String name = "Unicycle";
    	public String toString() {
    		return this.name;
    	}
    }
    
    class Bicycle extends Cycle {
    	private String name = "Bicycle";
    	public String toString() {
    		return this.name;
    	}
    }
    
    class Tricycle extends Cycle {
    	private String name = "Tricycle";
    	public String toString() {
    		return this.name;
    	}
    }
    
    public class Demo1 {
    	
    	public static void ride(Cycle c) {
    		c.travel(c);
    	}
    	public static void main(String[] args) {
    		Unicycle unicycle = new Unicycle();
    		Bicycle bicycle = new Bicycle();
    		Tricycle tricycle = new Tricycle();
    		ride(unicycle);
    		ride(bicycle);
    		ride(tricycle);
    	}
    }

     

    展开全文
  • 这个就是理解错误了,多态的表现形式远远不止重写方法。 多态可以分为变量的多态,方法的多态和类的多态 变量的多态的表现形式是泛型(Generic),方法的多态就是我现在理解的多态(包括override and overload) 类...

    这个就是理解错误了,多态的表现形式远远不止重写方法。

    多态可以分为变量的多态,方法的多态和类的多态
    变量的多态的表现形式是泛型(Generic),方法的多态就是我现在理解的多态(包括override and overload)
    类的多态:就是抽象类和接口

    展开全文
  • 所以我就必须自己很清楚要传递什么样的对象其到底要干什么,而相对来说,以后如果系统要扩展也不是很容易。 当然,go也提供了接口,所以go是传接口而不是传基类来解决这个问题。但同一接口的不同对象在复用代码方面...

    在学网络的OSI模型时,我们知道了,因为人最适合思考的问题复杂度为3-7,所以OSI才分了七层。而IT做多了,就知道了,随便一个简单系统其复杂度都成百上千,而IT的三个世界,即从现实世界到计算机可运行的数字世界要靠我们IT人头脑中的想象的世界作为桥梁进行翻译。那我们该如何管理其间的复杂度呢?!

    通过OSI,我们理解了IT管理复杂度的核心思想就是分层,即通过分层来降阶复杂的世界,使得我们一次只需考虑几个最多十几个复杂度就好了,而整个系统的可靠性通过同层对等、层间约定接口进行组装。

    而这种依靠接口契约来切分子系统、逐层总装的思想就是IT管理复杂度的核心手段。而面向对象技术就是这一手段在编程领域最大的成果。其中多态的作用就是保持契约完好,即同一基类具有行为的一致性,在考虑这类对象和整个系统其它要素的协作时,就不需要考虑不同类的行为差异,这就降低了这个场景下的复杂度。

    作为一个例子,我最近的一个项目要用go,结果我顺手就用了一个多态,结果发现go不支持:( 那我就没办法传一个基类给到其它函数,然后自动根据实际的对象类型来决定到底调哪个函数。所以我就必须自己很清楚要传递什么样的对象其到底要干什么,而相对来说,以后如果系统要扩展也不是很容易。

    当然,go也提供了接口,所以go是传接口而不是传基类来解决这个问题。但同一接口的不同对象在复用代码方面就没有用继承来的简洁了。

    所以呢,java是往方便我们高度抽象、降低复杂度方向努力的,所以特别适合解决复杂的业务管理问题;而go则是啥事你都得先想清楚了,然后支持我们干净利落的高效解决问题的。

    展开全文
  • OCP原则对添加开放open,对修改关闭close,如果不添加一个Pet类,不使用多态,那么以后还要增加新的猪宠物,就又要对Master类进行修改,增加public void feed(Pig p){ p.eat();语句,这违背了对修改关闭的原则。 *...
  • java - 多态性的好处当我开始寻找多态性的好处时,我在这里找到了这个问题。 但在这里我无法找到答案。 让我告诉我想找到什么。 这里我有一些课程:class CoolingMachines{public void startMachine(){//No ...
  • 【超经典】Java多态有什么好处?怎样用?

    万次阅读 多人点赞 2015-10-06 23:05:01
    多态的表现形式方法重载,方法改写,多态变量和泛型。重载是一种静态的多态性,在程序编译时确定被调用的方法,称为早绑定。而多态变量和改写相结合之后,方法的调用在运行时才能确定,是动态的多态性,称为晚绑定...
  • 什么多态? 概念:同一操作作用于不同的对象,可以不同的解释,产生不同的执行结果,这就是多态性。简单的说:就是用基类的引用指向子类的对象。 为什么要用多态呢? 原因:我们知道,封装可以隐藏实现细节...
  • 什么是多态?为什么用多态?有什么好处?

    万次阅读 多人点赞 2018-07-13 16:48:56
    我这里强调的是类的多态,这是我们在以后的工作中经常回用到的首先,这样一个系统:个学生工作从达内毕业了,作的还不错.买了辆捷达汽车.这个系统应该如何设计呢?按照OO的思想,我们会抽象出来一个类,表示捷达汽车,...
  • 多态好处

    千次阅读 2018-07-29 00:35:21
    多态有什么好处? 有两个好处: 1. 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。//继承  2. 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 560
精华内容 224
关键字:

多态有什么好处