多态

Objective-C 继承与多态

╄→尐↘猪︶ㄣ 提交于 2020-03-25 18:27:03
继承   什么是继承?继承的优点和缺点? 继承是指一个对象直接使用另一对象的属性和方法。 继承需要符合的关系:is-a(比如狗是犬科动物,猫是猫科动物) 如何寻找父类? 把众多子类的公共部分抽离出来,形成一个类,即父类 子类继承父类,子类具有父类的属性和行为,以及自身特殊的属性和行为。(即子类功能比较强大) 继承的优点: 1.抽出重复的代码 2.建立类与类之间的关系 缺点: 耦合性高 特点:OC中只允许单一继承,因为多继承会有“致命方块” 定义一个子类: 在.h文件中 Super关键字,在子类中重写方法时,可以让调用者跳过这一层而调用父类中的方法。 作用: (1)直接调用父类中的某一个方法 (2)Super处在对象方法中,那么就会调用父类的对象方法;super处于类方法中,那么就会调用父类的类方法。 使用场景:子类在重写父类方法时,想要保留父类的一些行为。 使用方法[super 方法名],调用父类的方法。 多态:   多态就是对于不同对象响应同一个方法时做出的不同反应。(比如睡觉,不同的人睡觉的姿势不同,这就是一种多态) 多态的好处: 1.允许在多个类中定义同一消息接口 2.可以定义一个通用的调用方法,以简化调用 多态简言之就是父类的指针指向子类  来源: https://www.cnblogs.com/mojiewei/p/4761064.html

抽象类,多态和接口

落花浮王杯 提交于 2020-03-25 10:07:42
抽象 抽象方法必须在派生类中重写,这一点和接口类似,虚方法不必 抽象方法只能在抽象类中声明 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp3 { class Program { static void Main(string[] args) { Son s = new Son(); s.Oprint(); s.Wr(); // father f = new father();不能实例化 father f = s; f.Oprint(); f.Wr(); } } abstract class father { public virtual void Oprint()//虚方法 { Console.WriteLine("调用了father的输出"); } public abstract void Wr(); } class Son : father { public override void Oprint() { Console.WriteLine("调用了Son的输出"); } public override void Wr() { Console

面向对象基本特征:多态

ⅰ亾dé卋堺 提交于 2020-03-25 04:38:11
多态是面向对象最重要的特征。具体到Java中是如何体现的呢。 多态在我们的使用中其实就是重载与重写。下面分别进行讲述一下。 重载 重载的定义:一个类中,如果有两个方法的方法名相同,但参数列表不同,可以说一个方法是另一个方法的重载。 注意2点:1.方法名相同 2.参数列表不同(参数列表为:参数的类型,参数的个数) 调用重载方法的时候,JVM会根据不同的参数列表来选择合适的方法。 我们来看一下代码: public class Main { public static void main(String[] args) { Father f= new Father(); f.print(); f.print(5); } } class Father{public void print() { System.out.println("father"); }public void print(int x) { System.out.println(x); } } 看一下字节码: 可以很明显看到invokevirtual调用了不同的方法。 重写 当子类拥有和父类相同的方法(方法名,参数列表相同),则说子类重写了父类的方法。 注:1.方法名相同 2.参数列表相同 3 子类重写方法的访问修饰符必须大于等于父类的方法。(比如父类为 protected void print(){}

三大特征 封装 继承 多态

时光总嘲笑我的痴心妄想 提交于 2020-03-25 04:36:53
''' 1、面向对象与面向过程 面向过程:核心过程二字,过程即解决问题的步骤,就是先干什么后干什么 基于该思想写程序就好比在这是一条流水线,是一种机械式的思维方式 优点:复杂的过程流程化 缺点:扩展性差 面向对象:核心是对象二字,对象指特征与技能的结合体 基于该思想编写程序就好比在创造一个世界,世界是由一个个对象组成,是一种‘上帝式’的思维方式 优点:可扩展性强 缺点:变成复杂度高,极容易出现过度设计的问题 2、类 对象是特征与技能的结合体,类就是一系列对象相似的特征与技能的结合体 在现实生活中:一定是先有一个个具体的对象,后总结出类 在程序中:一定是先定义类,后产生对象 ''' # class Students: # school = '中心小学' # def __init__(self,name, age, job): # self.name = name # self.age = age # self.job = job # def run(self): # # return 'running......' # print('running....') # stu1 = Students('张三', 18, 'IT') # stu2 = Students('王二', 16, 'student') # stu3 = Students('赵五', 19, 'teacher') #

Java基本特征 - 多态

核能气质少年 提交于 2020-03-25 04:35:41
多态的实现方式: 1、 重载(overload):实现编译时的多态性,前绑定 同一个类中、方法名相同、参数类型或者参数数量不相同 重写(override):运行时的多态性,后绑定。运行时的多态,是面向对象的精髓。 方法名相同、参数类型相同;子类返回类型<=父类返回类型,子类抛出异常<=父类抛出异常,子类访问权限>=父类访问权限 (两同两小一大原则) 2、 要实现多态需要做两件事: 方法重写:子类继承父类并重写父类中已有的或抽象的方法; 对象造型:用 父类型对象引用 引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为。 来源: https://www.cnblogs.com/lashou/p/6069219.html

面向对象特征:继承、多态

情到浓时终转凉″ 提交于 2020-03-25 04:32:34
继承 ·为什么要有继承?   多个 类中存在相同的属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。 ·此处的多个类称为子类,单独的这个类称为父类(基类或超类)。可以理解为:子类 is a 父类 ·类继承语法规则: class Subclass extends Superclass{} 作用:   继承的出现提高了代码的复用性   继承的出现让类与类之间产生了关系,提供了多态的前提   不要仅为了获取其他类中某个功能而去继承 ·子类继承了父类,就继承了父类的方法和属性 在子类中,可以使用父类中定义的方法和属性,也可以创建新的数据和方法。 ·在Java中,继承的关键字用的是“extends”,即子类不是父类的子集,而是对父类的“扩展”。 关于继承的规则:   子类不能直接访问父类中私有的(private)的成员变量和方法。 ·Java只支持单继承,不允许多重继承   一个子类只能有一个父类   一个父类可以派生出多个子类 方法的重写(override) ·定义:在子类中可以根据需要对从父类中继承来的方法进行改造,也称方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法。 ·要求   重写方法必须和被重写方法具有相同的 方法名称、参数列表和返回值类型 。   重写方法不能使用比被重写方法更严格的访问权限。  

c++复习:多态

早过忘川 提交于 2020-03-25 02:51:44
一个多态的例子: #include<iostream> #include<vector> #include<string> #include<stdlib.h> #include<set> #include<map> using namespace std; #define MAX 999999 class takebus { public: void takebus_to_subway() { cout<<"to sbway:take 438"<<endl; } void takebus_to_station() { cout<<"to_station:take K1"<<endl; } }; class BUS { public: virtual void Takebus_to_somewhere(takebus &tb)=0; }; class subway:public BUS { public: virtual void Takebus_to_somewhere(takebus & tb) { tb.takebus_to_subway(); } }; class station:public BUS { public: virtual void Takebus_to_somewhere(takebus & tb) { tb.takebus_to_station(); }

20180117多态复习之二

馋奶兔 提交于 2020-03-24 11:43:15
/*--> */ /*--> */ 多态:一种代码重用的机制。 分类:运行时多态(重写)和编译时多态(重载)。 /*代码举例*/ /*代码说明:督导监督教师教学和学生上课听课等情况*/ public class Person{ private String name; private int age; private char gender; public Person(){ } public void setName(String name){ this.name=name; } public String getName(){ return name; } public void setAge(int age){ this.age=age; } public String getAge(){ return age; } public void setGender(char gender){ this.gender=gender; } public char getGender(){ return gender; } public void print(){ System.out.println("我是"+name+",年龄是"+age+"岁,我的性别是"+gender); } } /*教师类*/ public class Teacher extends Person{

重新复习-java 多态

ぐ巨炮叔叔 提交于 2020-03-24 11:42:09
多态的定义: 指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)简而言之就是: 对于同一动作做出的响应产生不同的结果 多态存在的必要条件: 在继承的基础上 要有重写 父类引用指向子类对象(即向上转型) 多态存在的好处: 可替换性 (substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。 可扩充性 (extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。 接口性 (interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。 灵活性 (flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。 简化性 (simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。 多态的实现方式: 继承和接口 继承实现多态: 对于指向子类对象的父类引用,在处理该引用时,它适用于继承该父类的所有子类,子类对象的不同,对方法的实现也就不同,执行相同动作产生的行为也就不同。 如果父类对象是抽象类,则继承了该抽象类的子类必须父类中的所有抽象方法

JavaSE复习日记 : 多态

时光毁灭记忆、已成空白 提交于 2020-03-24 11:36:22
/** * 里氏替换原则 : * 能使用父类的地方,一定可以使用子类 * 什么是多态 : * 父类的引用,指向子类的对象 * 多态的前提条件 : * 有继承关系的两个类 * 多态的目的 : * ☆☆☆ 代码的重用 * 多态发什么在什么时候 : * 赋值的时候 * * !!!!!!!!! 多态中的 ☆☆☆ 覆写 是特指的 成员方法!!!!!!!!! * 什么是覆写 : * 就是在子类有个和父类相同的方法 : 方法名 , 参数列表 , 返回值类型 (和修饰符列表没关系) * 1 方法名相同 : 不相同,就是两个不一样的方法了 不是覆写 * 2 参数列表相同 : 参数列表不同,就是方法的重载了,也不是覆写 * 参数列表的 个数 和 数据类型 都相同 才叫相同吧 * 3 返回值类型相同 ; 返回值代表函数(方法)的功能,覆写是为了功能更强大,不能降低功能,所以必须相同 * 覆写之后 不能比原有的方法有更低的访问权限 ( 权限的降低 就意味着 功能的降低 ) * 覆写之后 不能比原有的方法有更宽泛的异常 ( 只能异常越来越低 ) * *!!!!! ☆☆☆ 父类的属性列表是在编译的时候就生成了 : 就是javac的时候☆☆☆ *!!!!! ☆☆☆ 子类的属性列表是在运行时才生成 : 就是java运行的时候☆☆☆ * * 父类和子类的调用有两种形式 : * 1 多态 父类引用指向子类的对象