多态

如何实现多态

南笙酒味 提交于 2020-01-22 00:00:36
1、多态:最终表现出来的是多种形态 2、如何实现多态? 如何用C自己实现多态?,同一个函数,形参为指针或者引用,传入各个同类型的实体,然后调用各自的函数,这背后是如何调用的呢?通过虚函数,建立虚表vtable,虚表的开头都是虚函数,然后自己寻找,这样速度快 来源: CSDN 作者: Tine Chan 链接: https://blog.csdn.net/chanleoo/article/details/104066061

Java基础方面

这一生的挚爱 提交于 2020-01-21 17:42:58
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 、

五. python面向对象(多态 和metaclass=abc.ABCMeta)

▼魔方 西西 提交于 2020-01-21 14:40:31
一. 多态 多肽: 一种事物的多种形态 叫多肽 例如 动物(animal) 猫 狗 ....... # animal.py 文件 # 动物类 都有名字这个属性 和吃这个方法 class Animal(object): def __init__(self,name): self.name=name def eat(self): print(self.name+"吃1111111111111111") # cat.py文件 # 让定的猫这个属性去继承动这个方法 from animal import Animal class Cat(Animal): def __init__(self, name): # self.name=name super(Cat, self).__init__(name) # def eat() # print(self.name+"吃") # mouse.py文件 # 让mouse去继承动物这个类 from animal import Animal class Mouse(Animal): def __init__(self,name): #self.name=name super(Mouse,self).__init__(name) #def eat(): #print(self.name+"吃") # person.py文件 class Person

【C++】多态类面试题

浪子不回头ぞ 提交于 2020-01-21 14:02:40
多态类面试题 什么是多态? 答: 不同的对象完成相同的事件(具有相同的函数),产生不同的结果(函数内部实现不同)。 什么是重载、重写、重定义? 作用域 函数名、参数、返回值的要求 其它的要求 重载 两个函数在同一作用域 函数名、参数相同 重写(覆盖) 两个函数分别在基类和派生类的作用域 函数名、参数、返回值都相同 两个函数必须是虚函数 重定义(隐藏) 两个函数分别在基类和派生类的作用域 函数名相同 基类和派生类的同名函数不构成重写就是重定义 多态的实现原理? 答: 通过虚基表实现。 构造函数可以是虚函数吗? 答:不可以。因为对象中的虚函数表指针是在构造函数初始化列表阶段才初始化的。 析构函数可以是虚函数吗? 答:可以。但是在某一种特定的条件下,必须将析构函数定义为虚函数。(见链接)。 虚函数可不可以定义成static类型的函数? 答:不可以。虚函数的地址要存到虚表中去,static不用对象就可以调用,那么没有对象,就没有虚表指针,就找不到虚表了。没有虚表就肯定不能实现多态。没有对象,就没有this指针,所以虚函数就是为了实现出多态,定义成static静态函数就找不到虚表,实现不了多态。 内联函数不能是虚函数 正确 虚函数可以定义成内联函数吗? 答:不可以。内联函数没有地址,每次用到内联函数的时候,都是在调用的地方进行了展开,普通函数有地址,调用的时候汇编代码中就call(调用的意思

JAVA编程思想——分析阅读

点点圈 提交于 2020-01-21 12:37:51
需要源码、JDK1.6 、编码风格参考阿里java规约 7/12开始 有点意识到自己喜欢理论大而泛的模糊知识的学习,而不喜欢实践和细节的打磨,是因为粗心浮躁导致的么? cron表达式使用 设计能力、领域建模能力 其他: 海明威的硬币:老人与海 工具准备: java编程思想电子版 别人整理的思维导图 前言 适用范围:Java SE5/6 版本。 Java的设计目标是:为程序员减少复杂性,缩短代码的开发时间,跨平台复用。 学习方法:一模式或一节点就进入一练习,思维与实践并行,现学现卖。 每当我认为我已经理解了并发编程时,又会有新的奇山峻岭等待这我去征服。——作者都花了好几个月写并发这一篇章并发出这样的感慨,我们又有什么理由妄自菲薄呢。 绪论 学习语言时:需要在头脑中创建一个模型,以加强对这种语言的深入理解;如果遇到了疑问,就将它反馈到头脑的模型中并推断出答案。 疑问:模型是什么意思?java略图?宏语言是什么? A:模型指的是思维导图。有个一整个的概念。 按照人类学习语言的方式。? 一、对象导论 1 知识 人们所能够解决的问题的复杂性直接取决于抽象的类型和质量。类型即指所抽象的是什么,也可以说用的是什么类型的语言。Java,C ,汇编,Python等。其中想C或者汇编要基于计算机的结构来求解问题,面向过程;而Java 等面向对象的语言是基于问题来求解,面向对象。 面向对象的5个基本特性

Java 多态 虚方法

泄露秘密 提交于 2020-01-21 00:14:12
Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。 看代码: package com.company; public class Main { public static void main(String[] args) { A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); System.out.println(a1.show(b)); System.out.println(a1.show(c)); System.out.println(a1.show(d)); System.out.println(a2.show(b)); System.out.println(a2.show(c)); System.out.println(a2.show(d)); System.out.println(b.show(b)); System.out.println(b.show(c)); System.out.println(b.show(d)); } } class A { public String show(D obj) { return ("A and D"); } public String show(A obj) { return ("A and A"

JAVA学习——5.方法的重载和重写、多态

我只是一个虾纸丫 提交于 2020-01-20 20:47:13
目录 方法重载 方法重载有以下几种规则: 方法重写 多态 多态的实现条件 多态的实现方式 方法重载 方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。方法重载一般用于创建一组任务相似但是参数不同的方法。 public class Test { void f ( int i ) { System . out . println ( “i = “ + i ) ; } void f ( float f ) { System . out . println ( "f=" + f ) ; } void f ( String s ) { System . out . println ( "s=" + s ) ; } void f ( String s1 , String s2 ) { System . out . println ( "s1+s2=" + ( s1 + s2 ) ) ; } void f ( String s , int i ) { System . out . println ( "s=" + s + ",i=" + i ) ; } public static void main ( String [ ] args ) { Test test = new Test ( ) ; test . f ( 3456 ) ; test . f (

java学习笔记——接口和多态

我与影子孤独终老i 提交于 2020-01-20 20:33:50
接口和多态 文章目录 接口和多态 接口 接口概述 接口的特征 接口的继承和实现 接口的应用 接口在jdk1.8中的特性 使用接口的好处 接口和抽象类的区别 多态 父子类之间的转换 多态定义 多态的优势 接口的多态 多态的应用 instanceof操作符 面向对象设计原则 接口 接口概述 ​ 当一个抽象类,如果抽象类中的所有方法都是抽象的,那么我们就可以把它定义为一个接口,接口是对行为的抽象。类是对属性和行为的抽象。 语法 public interface 接口名{ ​ //接口成员 } 接口的特征 1.接口中的方法的定义不需要abstract来修饰,默认就是抽象的 2.接口是不可以实例化的,需要有类来实现接口 3.接口中的方法不能和private,static和final共存 4.在接口中可以定义”属性”,可以通过接口的实现类的实例来访问(不推荐),推荐使用接口名.常量,这是一个常量默认是public, static ,final 注意:常量的定义命名的规范要使用大写,单词之间要用“_”分隔。 5.接口可以继承接口(多继承) 接口的继承和实现 接口中可以多继承,即接口可以继承接口 [修饰符] interface 接口名 extends 父接口1,父接口2,···{ ​ 常量定义 ​ 方法定义 } 实现接口的语法: public class 类名 implements 接口名,接口名

15 Java中的接口

China☆狼群 提交于 2020-01-20 18:49:20
1.接口的概述 接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。 Java中的接口更多的体现在对行为的抽象。 2.接口的特点 接口用关键字interface修饰 public interface 接口名 { } 类实现接口用implements表示 public class 类名 implements 接口名 { } 接口不能实例化 接口如何实例化呢?参照多态的方式,通过实现类对象实例化,这叫接口多态。 多态的形式:具体类多态,抽象类多态,接口多态。 接口的子类 要么重写接口中的所有抽象方法 要么子类也是抽象类 3.接口的成员特点 接口可以理解成统一的"协议",而接口中的属性也属于协议中的内容;但是接口的属性都是公共的,静态的,最终的 成员特点 成员变量 只能是常量 默认修饰符:public static final 必须声明时初始化 () 构造方法 没有,因为接口主要是扩展功能的,而没有具体存在 成员方法 只能是抽象方法 默认修饰符:public abstract 关于接口中的方法,JDK8和JDK9中有一些新特性,后面再讲解 代码演示: 接口 实现类 测试类 来源: CSDN 作者: 我的啊民 链接: https://blog.csdn.net/weixin_43691098/article/details/104054793

继承与多态

旧巷老猫 提交于 2020-01-20 10:17:57
1. 构造函数:完成对象的初始化工作 以下代码为何无法通过编译?哪儿出错了? 编译器提示:构造函数Foo()未定义 //正确代码如下 public class Test { public static void main(String[] args) { Foo obj1=new Foo(); } } class Foo{ int value; Foo(){ } public Foo(int initValue) { value=initValue; } } 构造函数应注意: 1.构造函数没有返回值,也不能用void修饰. 如果不小心给构造函数前面添加了返回值类型,那么这将使这个构造函数变成一个普通的方法, 在运行时将产生找不到构造方法的错误。 2.如果类的构造函数被重写了,如上例,Foo类已经有了一个有参数有方法体的构造函数,这时编译器就不会再给它默认加上一个无参且方法体为空的构造函数.可以理解为无参的构造函数被覆盖了.这种情况称为 没有默认构造函数. 3.构造方法可以重载,以参数的个数,类型,顺序。 4.一个类可以定义多个构造方法,如果写的类里面没有构造函数,那么编译器会默认加上一个无参数且方法体为空的构造函数. 2. 在函数的继承里,子类必须调用父类的构造函数。但是,子类只能继承父类的 默认 构造函数,如果父类没有默认的构造函数,那子类不能从父类继承默认构造函数