多态

精选Java中的多态和继承

倾然丶 夕夏残阳落幕 提交于 2020-02-26 05:36:05
在优锐课架构学习中,了解了关于用多态方法调用将你的大脑包围在Java方法调用周围 根据传说中的Venkat Subramaniam,多态是面向对象编程中最重要的概念。 多态性(或对象根据其类型执行特殊操作的能力)使Java代码具有灵活性。 诸如 四个人帮 之类的设计模式(例如Command,Observer,Decorator,Strategy和许多其他模式)都使用某种形式的多态性。 精通此概念可极大地提高你思考解决编程难题的能力。 Juggy: public abstract class JavaMascot { public abstract void executeAction();}public class Duke extends JavaMascot { @Override public void executeAction() { System.out.println("Punch!"); }}public class Juggy extends JavaMascot { @Override public void executeAction() { System.out.println("Fly!"); }}public class JavaMascotTest { public static void main(String... args) {

什么是多态性?它的用途是什么?

佐手、 提交于 2020-02-26 03:24:30
什么是多态性?它的用途是什么? #1楼 通常,这指的是类型A的对象的行为类似于类型B的对象的能力。在面向对象的编程中,这通常是通过继承来实现的。 一些维基百科链接以了解更多信息: 面向对象编程中的多态 类型多态 编辑:修复断开的链接。 #2楼 多态是一种将对象类视为父类的能力。 例如,假设有一个叫Animal的类,还有一个叫Dog的类,它是从Animal继承的。 多态是将任何Dog对象都视为Animal对象的能力,如下所示: Dog* dog = new Dog; Animal* animal = dog; #3楼 让我们用一个比喻。 对于给定的音乐剧本,每位演奏该曲的音乐家都会在演绎中赋予自己的风格。 音乐家可以通过界面进行抽象,音乐家所属的流派可以是一个抽象类,它定义了一些全球性的解释规则,并且每个演奏者都可以通过一个具体的类来建模。 如果您是音乐作品的听众,那么您可以参考剧本,例如巴赫(Bach)的“富加和托卡塔(Fuga and Tocata)”,每个演奏该剧本的音乐家都以自己的方式进行多态操作。 这只是一个可能的设计示例(使用Java): public interface Musician { public void play(Work work); } public interface Work { public String getScript(); } public

写出优质Java代码的4个技巧

僤鯓⒐⒋嵵緔 提交于 2020-02-26 02:06:02
写出优质Java代码的4个技巧 我们平时的编程任务不外乎就是将相同的技术套件应用到不同的项目中去,对于大多数情况来说,这些技术都是可以满足目标的。然而,有的项目可能需要用到一些特别的技术,因此工程师们得深入研究,去寻找那些最简单但最有效的方法。在 前一篇文章 中,我们讨论了必要时可以使用的四种特殊技术,这些特殊技术可以创建更好的Java软件;而本文我们将介绍一些有助于解决常见问题的通用设计策略和目标实现技术。 1 .只做有目的性的优化 大型软件系统肯定非常关注性能问题。虽然我们希望能够写出最高效的代码,但很多时候,如果想对代码进行优化,我们却无从下手。例如,下面的这段代码会影响到性能吗? public void processIntegers(List<Integer> integers) { for (Integer value: integers) { for (int i = integers.size() - 1; i >= 0; i--) { value += integers.get(i); } } } 这就得视情况而定了。上面这段代码可以看出它的处理算法是O(n³)(使用 大O符号 ),其中n是list集合的大小。如果n只有5,那么就不会有问题,只会执行25次迭代。但如果n是10万,那可能会影响性能了。请注意,即使这样我们也不能判定肯定会有问题

初始继承和多态,厉害了我的哥。。。。

断了今生、忘了曾经 提交于 2020-02-24 21:23:36
public class Employee { private string id; public string Id { get { return id; } set { id = value; } } private string name; public string Name { get { return name; } set { name = value; } } } class PM:Employee { public PM(string id, string name) { this.Id = id; this.Name = name; } public void Sa() { Console.WriteLine("大家好,我的学号"+Id+"我的姓名"+Name); } class Program { static void Main(string[] args) { PM num = new PM("l","张三"); num.Sa(); Console.Read(); } } 1.属性 public string Name{get;set;} private int age; 2.继承:在程序中,如果一个类A:类B,这种机制就是继承。 子类可以继承父类的所有内容(成员)吗? 1).私有成员(属性和方法) 2.)构造函数 3.)final修饰过的方法

C#中的多态性 (包含demo)

别说谁变了你拦得住时间么 提交于 2020-02-24 13:21:41
C# 中的多态性 首先理解一下什么叫多态。同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。 多态性通过派生类覆写基类中的虚函数型方法来实现。 多态性分为两种,一种是编译时的多态性,一种是运行时的多态性。 编译时的多态性:编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。 运行时的多态性:运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。 C# 中运行时的多态性是通过覆写虚成员实现。 下面我们来分别说明一下多态中涉及到的四个概念:重载,覆写,虚方法和抽象方法。 重载和覆写的区别: 重载 类中定义的方法的不同版本 public int Calculate( int x, int y) public double Calculate( double x, double y) 特点(两必须一可以) 方法名必须相同 参数列表必须不相同 返回值类型可以不相同 覆写 子类中为满足自己的需要来重复定义某个方法的不同实现。 通过使用 override 关键字来实现覆写。 只有虚方法和抽象方法才能被覆写。 要求(三相同) 相同的方法名称 相同的参数列表 相同的返回值类型 例: public class Test { public int Calculate( int x, int y)

OC面向对象—多态

£可爱£侵袭症+ 提交于 2020-02-24 06:15:51
OC 面向对象—多态 一、基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态。 在使用多态是,会进行动态检测,以调用真实的对象方法。 多态在代码中的体现即父类指针指向子类对象。 Animal 类的声明 Animal 类的实现 Dog 类继承自 Animal 类 Dog 类的实现 测试程序: 二、使用注意 代码分析: Dog *d=[[Animal alloc] init]; 动物是一条狗?语义正确吗? NSString *str=[Dog new]; 狗是一个字符串?正确吗? Oc 语言是一门弱语法的语言,编译的时候并不会报错,所以这就要求我们在实际的开发过程中一定要按照既定的规范来写代码,不要出现狗是一个字符串这样的问题。 多态的好处: 需要一个新的函数专门用来喂狗 Void feed(Dog *d) { [d eat]; } 如果这个时候也需要喂猫,那就应该重写新一个新的函数 Void feed(Cat *c) { [c eat]; } 而狗和猫实际上都继承自动物这个类,在这里就可以使用多态来简化代码了。 这里只需要把函数的参数写成是 Animal * 类型的,那么 Dog 和 Cat 类型的对象就都可以传入进来。 调用的时候直接改变参数就可以了。 多态的局限性:父类类型的指针变量不能直接调用子类特有的方法。 不建议的做法 ~ Animal *a=[

重载和重写的区别

吃可爱长大的小学妹 提交于 2020-02-24 05:03:30
重载和重写的区别 1、重载(Overloading) (1)方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时 存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。 (2)Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具 有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型 来决定具体使用哪个方法, 这就是多态性。 (3)重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同 也可以不相同。无法以返回型别作为重载函数的区分标准。 下面是重载的例子: package c04.answer;//这是包名 //这是这个程序的第一种编程方法,在main方法中先创建一个Dog类实例,然后在Dog 类的构造方法中利用this关键字调用不同的bark方法。不同的重载方法bark是根据其参 数类型的不同而区分的。 //注意:除构造器以外,编译器禁止在其他任何地方中调用构造器。 package c04.answer; public class Dog { Dog() { this.bark(); } void bark()//bark()方法是重载方法 { System.out.println("no barking!"); this.bark("female", 3.4); }

php面向对象

瘦欲@ 提交于 2020-02-24 00:32:17
面向对象类权限修饰符: public :类的内部、外部、子类中使用 protected:本类和子类中使用 private:只能在本类中使用 面向对象的封装、继承、多态 继承: ①子类只能继承父类的非私有属性。 ②子类继承父类后,相当于将父类的属性和方法copy到子类,可以直接使用$this调用该属性; ③PHP只能单继承,不支持一个类继承多个类。但是一个类可以进行多层继承(即A继承于B,而C又继承于A,C通过A间接继承了B) 封装: 类实现封装是为了不让外面的类随意的修改一个类的成员变量,所以在定义一个类的成员的时候,我们使用private关键字设置这个成员的访问权限 只能被这个类的其他成员方法调用,而不能被其他类中的方法调用,即通过本类中提供的方法来访问本类中的私有属性。 ①所以在该类中我们会提供一个访问私有属性的方法 ②然后我们一般会定义两个方法来实现对一个变量的操作,即:get()与set()方法。 多态: 一个类,被多个子类继承,如果这个类的某个方法,在多个子类中,表现出不同的功能,我们称这种行为为多态。(同一个类的不同子类表现出不同的形态)   实现:     子类继承父类 ->子类重写父类方法 ->父类引用指向子类对象 来源: https://www.cnblogs.com/bloghuang/p/10759350.html

java面向对象入门(1)-入门介绍

瘦欲@ 提交于 2020-02-24 00:00:55
在本 Java OOPs 概念教程中,我们将学习四种主要的面向对象原则 -- 抽象、封装、继承和多态性。它们也被称为面向对象编程范式的四大支柱。 _ 抽象 _是在不考虑无关细节的情况下公开实体基本细节的过程,以降低用户的复杂性。 _ 封装 _是将数据和对数据的操作捆绑到一个实体中的过程。 _ 继承 _用于从现有类型派生新类型,从而建立父子关系。 _ 多态 _使一个实体在不同的上下文中具有不同的含义。 1.抽象 将 OOP中的抽象 与实时示例相关联时,它很容易理解。例如,当您开车时,您不必担心汽车的内部实际工作情况。您所关心的是通过方向盘,制动踏板,油门踏板等接口与汽车交互。在这里,您对汽车的了解是抽象的。 在计算机科学中,抽象是一个过程,通过该过程定义数据和程序的形式类似于其含义( 语义 ),同时隐藏实现细节。 用更简单的术语来说,抽象是 隐藏与上下文无关 或仅显示相关信息的信息,并通过将其与现实世界中的相似内容进行比较来简化信息。 通常,可以通过两种方式查看抽象: 1.1数据抽象 数据抽象是从多个较小的数据类型中创建复杂的数据类型的方法,该类型更接近于现实生活中的实体。例如, Employee 类可以是具有各种小型关联的复杂对象。 public class Employee { private Department department; private Address

Java基础-接口与多态

ε祈祈猫儿з 提交于 2020-02-23 09:23:41
一、接口 1.1 接口的概念 接口是功能的集合,同样可看做是一种数据类型。 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。 请记住:一切事物均有功能,即一切事物均有接口。 1.2 接口的定义 与定义类的class不同接口定义时需要使用interface关键字。定义接口所在的仍为.java文件,虽然声明时使用的为interface关键字的编译后仍然会产生.class文件。这点可以让我们将接口看做是一种只包含了功能声明的特殊类。 定义格式: public interface 接口名 { 抽象方法1; 抽象方法2; 抽象方法3; } 注意: (1)接口中的方法均为公共访问的抽象方法 (2)接口中无法定义普通的成员变量,必须定义为常量。 public static final 数据类型 变量名 = 值; 1.3 类实现接口 类与接口的关系为实现关系,类实现接口。实现的动作类似继承,只是关键字不同,实现使用implements。 其他类(实现类)实现接口后,就相当于声明:”我应该具备这个接口中的功能”。实现类仍然需要重写方法以实现具体的功能。 格式如下: class 类 implements 接口 { 重写接口中方法 } 在类实现接口后,该类就会将接口中的抽象方法继承过来,此时该类需要重写该抽象方法