多态

多态

丶灬走出姿态 提交于 2020-01-19 17:48:54
多态从字面上讲很简单, 就是一个对象, 多种形态. 这个东西有什么用, 我们来看一段代码. package com.xyq.bao; public class Dog{ public void eat(){ System.out.println("狗吃骨头"); } } package com.xyq.bao; public class Cat{ public void eat(){ System.out.println("猫吃鱼"); } } package com.xyq.bao; public class Person{ public void feedCat(Cat c){ c.eat();// 让猫吃 } public void feedDog(Dog d){ d.eat();// 让狗吃 } } package com.xyq.bao; public class Test { public static void main(String[] args) { Person p = new Person(); Cat c = new Cat(); Dog d = new Dog(); p.feedCat(c); f.feedDog(d); } } 大家发现没有. 这个人啊. 好累哦. 喂猫, 喂狗的. 是吧, 但是如果再来一种动物怎么办? 比如养了一只鹦鹉. package

多态应用

别等时光非礼了梦想. 提交于 2020-01-19 16:16:29
多态应用 package com.lewen.opp; public class App { public void showAdd() { System.out.println("打广告"); } } package com.lewen.opp; public class QQ extends App { public void showAdd() { System.out.println("QQ渠道打广告"); } } package com.lewen.opp; public class WeChat extends App { public void showAdd() { System.out.println("微信渠道打广告"); } } package com.lewen.opp; public class Business { public void makeAdd(App app) { app.showAdd(); System.out.println("广而告之"); } } 测试一下 package com.lewen.opp; public class Customer { public static void main(String[] args) { Business bs = new Business(); // QQ qq = new QQ(); /

JavaSE(十一) —— 多态

岁酱吖の 提交于 2020-01-19 05:10:27
多态 1. 什么是多态 多态是继封装、继承之后,面向对象的第三大特性。 生活中,比如跑的动作,小猫、小狗和大象,跑起来是不一样的。再比如飞的动作,昆虫、鸟类和飞机,飞起来也是不一样的。可见,同一行为,通过不同的事物,可以体现出来的不同的形态。多态,描述的就是这样的状态。 多态 : 是指同一行为,具有多个不同表现形式 【前提】 1 . 继承或者实现【二选一】:实现可以理解为抽象方法 2. 方法的重写【意义体现:不重写,无意义】 3. 父类引用指向子类对象【格式体现】 public abstract class Animal { public abstract void eat ( ) ; } class Cat extends Animal { public void eat ( ) { System . out . println ( "吃鱼" ) ; } } class Dog extends Animal { public void eat ( ) { System . out . println ( "吃骨头" ) ; } } public class Test { public static void main ( String [ ] args ) { // 多态形式,创建对象 Animal a1 = new Cat ( ) ; // 调用的是 Cat 的 eat a1

java面试题大全-基础方面

我只是一个虾纸丫 提交于 2020-01-19 03:53:23
Java基础方面: 1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不写时默认为friendly 2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现 3、Static Nested Class 和 Inner Class的不同 答:Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象 4、&和&&的区别 答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 5、Collection 和 Collections的区别 答

c++多态及其实现

主宰稳场 提交于 2020-01-19 00:54:17
多态是在父类函数的前面加上 “virtual” 关键字,使子类与父类同名的函数产生一种联系; 多态会用到两个特性:向上造型、动态绑定 向上造型是指:拿一个子类对象当作父类来看待,比如下边代码中的子类Eillpce对象ell当作父类Shape对象来看待; 动态绑定:当我要调用一个函数的时候,运行的时候才知道要调用哪个函数,编译的时候是不确定的; class Shape { public: Shape(); virtual ~Shape(); //析构为什么会有虚函数 virtual void render(); void move(const XYPos&); virtual void resize(); protected: XYPos center; }; class Ellipse : public Shape { public: Ellipse(float maj, float minr); virtual void render(); //will define own protected: float major_axis,minor_axis; }; class Circle : public Ellipse { public: Circle(float radius) : Ellipse(radius, radius) {} virtual void render()

09-04 多态性与鸭子类型

≯℡__Kan透↙ 提交于 2020-01-18 12:15:04
多态与多态性 多态指的是一类事物有多种形态,比如动物有多种形态:猫、狗、猪 class Animal: #同一类事物:动物 def talk(self): pass class Cat(Animal): #动物的形态之一:猫 def talk(self): print('喵喵喵') class Dog(Animal): #动物的形态之二:狗 def talk(self): print('汪汪汪') class Pig(Animal): #动物的形态之三:猪 def talk(self): print('哼哼哼') #实例化得到三个对象 >>> cat=Cat() >>> dog=Dog() >>> pig=Pig() 插图:恶搞图34 多态性指的是可以在不用考虑对象具体类型的情况下而直接使用对象,这就需要在设计时,把对象的使用方法统一成一种:例如cat、dog、pig都是动物,但凡是动物肯定有talk方法,于是我们可以不用考虑它们三者的具体是什么类型的动物,而直接使用 >>> cat.talk() 喵喵喵 >>> dog.talk() 汪汪汪 >>> pig.talk() 哼哼哼 更进一步,我们可以定义一个统一的接口来使用 >>> def Talk(animal): ... animal.talk() ... >>> Talk(cat) 喵喵喵 >>> Talk(dog) 汪汪汪

09-04 多态性与鸭子类型

对着背影说爱祢 提交于 2020-01-18 12:14:50
多态与多态性 多态指的是一类事物有多种形态,比如动物有多种形态:猫、狗、猪 class Animal: #同一类事物:动物 def talk(self): pass class Cat(Animal): #动物的形态之一:猫 def talk(self): print('喵喵喵') class Dog(Animal): #动物的形态之二:狗 def talk(self): print('汪汪汪') class Pig(Animal): #动物的形态之三:猪 def talk(self): print('哼哼哼') #实例化得到三个对象 >>> cat=Cat() >>> dog=Dog() >>> pig=Pig() 插图:恶搞图34 多态性指的是可以在不用考虑对象具体类型的情况下而直接使用对象,这就需要在设计时,把对象的使用方法统一成一种:例如cat、dog、pig都是动物,但凡是动物肯定有talk方法,于是我们可以不用考虑它们三者的具体是什么类型的动物,而直接使用 >>> cat.talk() 喵喵喵 >>> dog.talk() 汪汪汪 >>> pig.talk() 哼哼哼 更进一步,我们可以定义一个统一的接口来使用 >>> def Talk(animal): ... animal.talk() ... >>> Talk(cat) 喵喵喵 >>> Talk(dog) 汪汪汪

C++ 虚函数表解析

[亡魂溺海] 提交于 2020-01-18 11:39:48
转自: c++虚函数 大牛的文章,就是通俗易懂,言简意赅。 前言 C++ 中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术, RTTI 技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的 C++ 的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。 当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片,没有详细的说明,没有比较,没有举一反三。不利于学习和阅读,所以这是我想写下这篇文章的原因。也希望大家多给我提意见。 言归正传,让我们一起进入虚函数的世界。 虚函数表 对 C++ 了解的人都应该知道虚函数( Virtual Function )是通过一张虚函数表( Virtual Table )来实现的。简称为 V-Table 。在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了这个实例的内存中,所以

细节!重点!易错点!--面试java基础篇(一)

萝らか妹 提交于 2020-01-17 20:45:23
今天来给大家分享一下java的重点易错点部分,也是各位同学面试需要准备的,欢迎大家交流指正。 1.java中的main方法是静态方法,即方法中的代码是存储在静态存储区的。 2.任何静态代码块都会在main方法之前执行。 3.java程序的初始化顺序:原则:静态优先于非静态,且只初始化一次;父类优先于子类;按照成员定义顺序初始化。 例顺序:父类静态变量,父类静态代码块,子类静态变量,子类静态代码块,父类非静态变量,父类非静态代码块,父类构造函数,子类非静态变量,子类非静态代码块,子类构造函数。 4.java中一个文件可以定义多个类,但只能有一个类被public修饰,且访问的类名与文件名必须相同,每一个类都会生成一个字节码文件。 5.构造函数的特点:1)名字必须与类名相同;2)构造函数不能被继承,不能被覆盖,但是可以被重载;3)子类可以通过super关键字来显示的调用父类的构造函数,但当父类没有提供无参的构造函数时,子类的构造函数必须显示的调用父类的构造函数。 6.java中的接口常量默认使用public static final修饰。 7.java在处理基本数据类型时,都是按照值传递,其他的都是按照引用传递。 8.clone方法,深复制和浅复制的区别:深复制把复制的对象所引用的对象都复制了一遍;浅赋值仅仅赋值所考虑的对象,不复制他所引用的对象。 9.三种获取类的方法:1)class

Java面试题技术类一

柔情痞子 提交于 2020-01-17 00:40:38
1、面向对象编程的三大特性是什么? (1).继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继 承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增 加新的方法使之更适合特殊的需要。 (2).封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 (3).多态: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据这个String类提供了数值不可改变字符串而这个StringBuffer类提供的字符串进行修改当你知道字符数据要改变的时候你就可以使用StringBuffer典型地,你可以使用StringBuffers来动态构造字符数据 3、说出ArrayList,Vector,