方法重载

ViewPager,PagerAdapter总结

筅森魡賤 提交于 2019-12-05 23:33:43
在一个 Android 应用中,我使用 FragmentPagerAdapter 来处理多 Fragment 页面的横向滑动。不过我碰到了一个问题,即当 Fragment 对应的数据集发生改变时,我希望能够通过调用 mAdapter.notifyDataSetChanged() 来触发 Fragment 页面使用新的数据调整或重新生成其内容,可是当我调用 notifyDataSetChanged() 后,发现什么都没发生。 搜索之后发现不止我一个人碰到这个问题,大家给出的解决办法五花八门,有些确实解决了问题,但是我总感觉问题没搞清楚。于是我决定搞明白这个问题到底是怎么回事,以及正确的用法到底如何。要搞明白这个问题,仅仅阅读文档并不足够,还需要阅读相关几个类的相关方法的实现,搞懂其设计意图。下面就是通过阅读源代码搞明白的内容。 【ViewPager】 ViewPager 如其名所述,是负责翻页的一个 View。准确说是一个 ViewGroup,包含多个 View 页,在手指横向滑动屏幕时,其负责对 View 进行切换。为了生成这些 View 页,需要提供一个 PagerAdapter 来进行和数据绑定以及生成最终的 View 页。 setAdapter() ViewPager 通过 setAdapter() 来建立与 PagerAdapter 的联系。这个联系是双向的,一方面

160、闭包、高阶函数、重载、多态、原型链、标记清除

本秂侑毒 提交于 2019-12-05 23:04:14
1、闭包 定义来源1:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures 定义本身1:内部函数可以访问外部函数作用域,外部函数不能直接访问内部函数的作用域,即函数内部不会受外部干扰。函数的这种机制叫做闭包。 定义来源2:《JavaScript高级程序设计》第178页 定义本身2:有权(能夠)访问另一个函数作用域中的变量的函数。 闭包的特征:函数中的函数 好处:闭包可以作为返回值被函数外部的变量引用,这样函数外部就可以访问函数内部的变量,减少全局变量。 坏处:导致函数的作用域不能释放,占用内存。 2、高阶函数 定义:操作其他函数的函数,比如map、forEach 3、关于重载 Java可以为一个函数定义两个定义,只要这两个定义的签名(参数的类型和数量)不同即可。JS没有签名,所以不能重载。 4、多态 同一操作作用于不同的对象上面,可以产生不同的执行结果。比如你说“叫”,鸭子听了会发出“嘎嘎声”,鸡听了会发出“咯咯声”。 5、原型链 var obj = {} function fn(){} //1、对象与函数的原型 obj.__proto__ === Object.prototype; fn.__proto__ === Function.prototype; fn.prototype={}; fn

方法,重载,面向对象

痴心易碎 提交于 2019-12-05 12:27:16
方法: 处理功能的代码段 方法的特点: 1.方法不能嵌套,定义在类中方法外 2.不调用不执行 定义: 1.有返回值类型的方法 修饰符 返回值类型 方法名(参数列表){ 处理功能的代码段; return 返回的结果; } 修饰符: 访问权限修饰符,先默认为public static 返回值类型: 如果一个方法执行过后需要返回一个结果给调用者,这个方法就应该定义为一个有返回值类型的方法 方法执行过结果的数据类型(基本|引用数据类型) 方法名:方法的名字 调用方法的时候需要根据方法名 标识符符合标识符的命名规范|规则 参数列表:可以没有参数,可以有多个参数 方法定义时候|执行过程中,不确定的数据,可以定义在方法的参数列表上 参数: 数据类型 参数名1,数据类型 参数名2,...(相当于一个局部变量的声明,作用域为当前定义的方法中) {}: 实现功能的代码 return: 1)返回值数据给方法的调用者 2)提前结束方法 方法的调用: 方法名(参数) -->执行方法中的代码 1.直接调用 方法名(实际参数) -->无法使用返回值 2.赋值调用 3.输出调用 System.out.println(getPI()); 2.没有返回值类型的方法 修饰符 void 方法名(参数列表){ 方法体语句; [return;] 可以选择性的添加 } void:没有返回值类型的方法 return:

Java—重写与重载的区别

我只是一个虾纸丫 提交于 2019-12-05 09:00:32
1.重写(Override) 子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除了子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写 ,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。 总结: 1.发生在父类与子类之间 2.方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同 3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private) 4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常 2.重载(Overload) 在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同)则视为重载。同时,重载对返回类型没有要求,可以相同也可以不同,但不能通过返回类型是否相同来判断重载。 总结: 1.重载Overload是一个类中多态性的一种表现 2.重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序) 3.重载的时候,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准 3.问:重载(Overload)和重写(Override)的区别? 答: 共同点 :方法的重载和重写都是 实现多态的 方式, 区别: 1

封装、继承和多态,重写、重载等基础复习

旧街凉风 提交于 2019-12-05 05:26:11
重载overloading 1.方法名相同,形参不同(包括参数顺序不同、类型不同、个数不同); 2.方法的返回值类型可同也可不同,所以不能用返回值类型来区分重载函数; 3.重载方法与被重载的方法可以抛出不同的异常; 4.重载体现了多态的特性:调用方法时根据传递的参数不同来决定具体调用那个重载方法,这就是多态性; public class Dog { Dog() { this.bark(); } //bark()方法是重载方法 void bark(){ System.out.println(\"no barking!\"); this.bark(\"female\", 3.4); } //注意:重载的方法的返回值都是一样的, void bark(String m,double l) { System.out.println(\"a barking dog!\"); this.bark(5, \"China\"); } //不能以返回值区分重载方法,而只能以“参数类型”和“类名”来区分 void bark(int a,String n) { System.out.println(\"a howling dog\"); } public static void main(String[] args) { Dog dog = new Dog(); dog.bark(); dog.bark(

模板重载or编译器的小技巧

六月ゝ 毕业季﹏ 提交于 2019-12-05 02:41:25
最近在思考怎样在C++中方便的实现委托,看了很多文章,但由于C++中对类非静态成员函数指针的调用比较特殊,一直以来没有找到很好的方法实现,直到最近在CodeProject上看到一篇关于C++中委托实现的方法,惊叹于作者高深的程序艺术,竟然可以重载模板类,通过同一个类来实例化多个不同参数个数,不同参数类型的函数指针,实现封装调用函数,最终实现委托,原文连接为http://www.codeproject.com/cpp/FastDelegate.asp 俺试着学习了其中一些方法(只能看懂一部分 - -!),成果如下 类成员函数调用的实现: // 首先声明该需要重载的模板类 // 注意:此处的类型Signature非常特殊,在后面的定义中编译器即把重载的所有类型声明参数看做是一个参数 // 编译器会将<C, R ( T1, T2 ... TN ) >中的所有参数匹配到声明中来 // 其中:C对应于声明中的C, 而R ( T1, T2 ... TN )看作是一个类型参数Signature // 只有这样才能编译通过,否则重载不成功,编译器会报too many template arguments错误 // C为类类型, Signature为类成员函数指针类型( R (T1, T2 ... Tn) ) template<class C, typename Signature> class

一起学Java(十二)

[亡魂溺海] 提交于 2019-12-05 02:38:44
不积跬步,无以至千里;不积小流,无以成江海。 Java语言基础 Java方法详述(重载与重写) 重载的概念: 在同一个类中,允许存在一个以上的的同名方法,只要它们的参数个数或者参数类型不同即可。 重载的特点: 与返回值类型无关,只看参数列表,且参数列表必须不同(访问修饰符和返回值类型可以相同也可以不同)。 示例: public class Test { public void test(){ System.out.println("test1"); } public void test(int a){ System.out.println("test2"); } //以下两个参数类型顺序不同 public void test(int a,String s){ System.out.println("test3"); } public void test(String s,int a){ System.out.println("test4"); } public static void main(String[] args){ Test o = new Test(); o.test(); o.test(1); o.test(1,"test3"); o.test("test4",1); } } 运行结果:   test1 test2 test3 test4 重写的概念:

重载和重写的区别

妖精的绣舞 提交于 2019-12-05 02:16:18
重载: 1、重载是由静态类型确定的,在类加载的时候就能确定,属于静态分派。 2、重载就是同一个类中方法名相同,但是参数类型或者个数或顺序不同,可以理解为一个类中的多态。 重载和返回值无关。 重写: 1、重写是由动态类型确定的,在运行时确定,属于动态分派。 2、动态分派是由虚方法表实现的,虚方法表里面存储的是每个方法的实际入口地址,如果子类没有重写父类的某个方法,那么这个方法在父类和子类的虚方法表中的地址相同,如果重写了,那么子类的虚方法表指向的是重写后的地址。 3、重写是针对于子类继承父类,子类重写父类的方法,由动态绑定实现。 4、子类方法的访问权限不能低于父类方法的访问权限。 来源: https://www.cnblogs.com/Z7TS/p/11897115.html

类和对象(中)C++

本小妞迷上赌 提交于 2019-12-05 01:14:02
类中哪些默认的事儿…… 1. 类的6个默认成员函数: 如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情 况下,都会自动生成下面6个默认成员函数。 class Date{}; 2. 构造函数: 构造函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员 都有 一个合适的初始值,并且在对象的生命周期内只调用一次。 构造函数的给出方式如下,参数可以给出缺省值,也可以重载构造函数。 class Date { public: Date(int year = 2000,int month=1,int day=1) { _year = year; _month = month; _day = day; } private: int _year; int _month; int _day; }; int main() { Date d1; return 0; } 构造函数是特殊的成员函数,需要注意的是,构造函数的虽然名称叫构造,但是需要注意的是构造函数的主 要任务并不是开空间创建对象,而是初始化对象。 其特征如下: 1、 函数名与类名相同。 2、无返回值。 3、对象实例化时编译器自动调用对应的构造函数。 4、构造函数可以重载。 5、如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定

C#函数(构造函数)的重载

只谈情不闲聊 提交于 2019-12-05 00:18:05
using System; namespace test { class Program { static void Main(string[] args) { Cat cat = new Cat();//不含参数的构造方法 Console.WriteLine("姓名是{0},年龄是{1}",cat.name,cat.age); Cat cat1 = new Cat("一只猫");//含1个参数的构造方法 Console.WriteLine("姓名是{0},年龄是{1}", cat1.name, cat1.age); Cat cat2 = new Cat("又一只猫",18);//含2个参数的构造方法 Console.WriteLine("姓名是{0},年龄是{1}", cat2.name, cat2.age); } class Cat { public string name; public int age; public Cat() { } public Cat(string nameValue) { name = nameValue; } public Cat(string nameValue, int ageValue) { name = nameValue; age = ageValue; } } } } using System; namespace test {