最近一直看java视频,疑惑挺多的,但收获也不小,以前似懂
非懂的东西,通过内存分析,明白多了。其实任何高深的技术最
后都能 转化成“普通话”这就是科学的魅力!
有些东西感觉挺重要,不过自己理解的还不到位!写写肤
浅的总结,留给自己!如果不妥之处,望大家批评指出,必定斧
正!
一、回调函数:
定义在百度上有。http://zh.wikipedia.org/zh/回调函数
看看人们大家之谈,各抒己见!内容丰富,对于我这个菜鸟来说,有点难度,也有收获。
从菜鸟的角度谈谈此问题。
回调:callback
函数就是方法。
从字面上理解,也就是米老师给我们说过的,其本质就是延迟实现。
看看软考视频,回调函数的例子是这样的,方法本身在实现过程中,使用自己!这种在使用过程中,回调自己的函数就是回调函数。
这样的理解很感性,不过能体现回调函数的本质。回调函数的应用很多。类型也不少,有人说有内部回调和外部回调,其划分角度不同而已。
我们平时也在用回调函数,比如我们在分层的时候,总是跨层调用。这就体现了回调函数。
本人对回调函数的理解比较浅,也在总结中!这样的谈了不足以发表博客,暂且搁在这里吧。
二、动态绑定
菜鸟理解的动态绑定比较肤浅,不过也是通过自己思考的结果。
看视频时,有这样一句话,动态绑定是多态的核心。多态是面向对象的核心。动态绑定是核心的核心。听起来挺重要的。
简单说,就是在运行时,根据对象的类型调用相应的方法。对象的类型不同,调用的方法也就不同。
如果子类重写父类的方法,则调用的是子类的方法,如果子类没有重写父类的方法,则调用父类的方法。
动态绑定是针对方法而言,属性没有。属性没有重写的过程,也就谈不上了。
理解的不是很全面,代码先不放上了。
三、对象转型。
class Animal {
public String name;
Animal (String name) {
this.name=name;
}
}
class Cat extends Animal {
public String eyesColor;
Cat(String n,String c) {
super(n);
eyesColor=c;
}
}
public class Test {
public static void main(String[] args) {
Test test = new Test();
Animal a = new Animal("name");
Cat c = new Cat("Catname","blue");
test.f(a);
test.f(c);
}
public void f(Animal a) {
System.out.println("name: "+a.name);
if(a instanceof Cat) {
Cat cat = (Cat) a;
System.out.println(" "+cat.eyesColor+" eyes");
}
}
}
Animal 某公司总部
Cat 公司地区子公司
假如公司总部只负责财务结算,子公司负责货物运输
突然有一个客户(调用f方法的地方)打电话给总公司(相当于打电话给Animal ),说
需要运输一批货物,总公司需要怎么办,肯定是吧这个业务接下来,然后下放到子公司
Cat
需要对象转换,就是要确认那个子公司有资格去做货物运输业务
不需要强转,要么总公司能自己执行货物运输业务
要么,客户知道子公司名称,直接打电话给子公司
第一种方法就是吧eyesColor 这个属性设置为Animal的属性
class Animal {
public String name;
public String eyesColor;
......
}
然后去掉Cat的eyesColor 属性
这样的缺陷很明显,意思是所有子类都有eyesColor属性,就好象,说有子公司都能负责
货物运输,实际情况不可能如此
第二种:修改f方法的参数类型
public void f(Cat a) {
System.out.println("name: "+a.name);
System.out.println(" "+a.eyesColor+" eyes");
}
就像上面这样,缺陷:该方法只针对Cat类型适用了。这是多态的体现,f(Animal,a),
a 是cat的父类。父类对象强转成子类对象后,调用子类的方法。
上面的总结平时做的总结,简短且直白!不足之处望大家积极之处,必定斧正!