黑马程序员----十-面向对象五
2016-01-26 11:24
465 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
==========================================
10-01-01
==========================================
1.多态的好处
提高了代码的扩展性,前期定义的代码可以使用后期的内容.
2.多态的弊端
前期定义的内容不能使用(调用)后期子类的特有内容.
3.多态的前提
1必须有关系,继承或实现
2要有覆盖
4.instanceof 例如 Person p=new Person()
Person instanceof p 为true
==========================================
10-01-10
==========================================
1.多态中的静态函数
静态的话就会调用父类,因为new Zi()根本不会被调用.
2.内部类
1内部类可以直接访问外部类中的成员
2外部类要访问内部类,必须建立内部类的对象
3一般用于类的设计
4分析事物时,发现该事物描述中还有事物,而且这个事物还在访问被描述事物的内容,这时就把还有的事物定义成内部类来描述.
3.内部类生成的class文件是Outer$inner.class
外部访问内部可以创建方法,创建内部类再访问
4.如果静态内部类,加载外部类时,内部类直接存在.就相当于一个外部类.注意:内部类中不能有静态成员.内部类在局部位置上只能访问局部中被final修饰的局部变量
==========================================
10-1-15
==========================================
1.匿名内部类就是内部类的简写格式
有前提:
内部类必须继承或者实现一个外部类或者接口
2.没名字怎么new呢?
必须有个明确的父类,所以必须继承或者实现一个外部类或者接口.
3.为什么不能创建抽象对象,因为有抽象方法.
如果想创建抽象对象,要先复写抽象方法.
所以 new Demo(){void show(){}};
就可以创建抽象对象Demo,这个Demo是子类.
4.匿名内部类其实就是一个匿名子类对象.
1new一个父类或接口
2复写里面的方法
3可以写其他方法
5.因为是创建匿名对象,可以直接在后面调用里面的方法.类里可以创建对象,方法里也可以创建对象.
==========================================
10-1-16
==========================================
1.如何实现一个匿名对象里的多个方法
那就用父类对象new.
Inter in=new Inter(){}
in.show1();
in.show2();
2.通常使用场景之一:
当函数参数是接口类型时,而且接口中的方法不超过三(不包含3),可以用匿名内部类作为实际参数进行传递.方法太多就失去阅读性.
==========================================
10-1-17
==========================================
1.在主函数中new Inner(); 为什么不行
因为主函数不能直接访问自己的非静态的内部类Inner.
2.如果是用父类来命名,那么父类中有几个方法就只能用几个方法.
Inter in=new Inter(){}
3.可以直接new Object(){}
但是一样不能命名.
4.创建的是匿名子类对象,所以命名时,那么子类对象就向上转型了,那么就不能使用子类方法了.
==========================================
10-1-18
==========================================
1.内存图解综合一下
先出来show...0,然后是constructor...9,
因为new的时候显示初始化还没有进行,先是默认初始化0,super走了show(),但是这时候还没有显示初始化,所以显示初始化在super()后面.
2.上次自己发现不能在类中直接写执行代码,原来只要加一个大括号,就可以直接写,而且会在构造函数之前执行.
3.当在局部代码块里面int num时,就是他自己的num,当他改变了num,就是类的num.
4.c9,f,s10,z10错误
f,s0,c9,z10正确
如果父类有aaa,那么
aaa,f,s0,c9,z10
原因:
其实上面说的构造代码块就是显示初始化的后面,之前是因为有super,但是没有父类对象,所以super执行完了就进行显示初始化.
现在有了父类对象,所以先执行super,也就是父类构造函数执行完了,就进行显示初始化,然后再运行子类super后的语句.
5.所以,1super,2显示初始化,3构造代码块初始化
==========================================
10-01-01
==========================================
1.多态的好处
提高了代码的扩展性,前期定义的代码可以使用后期的内容.
2.多态的弊端
前期定义的内容不能使用(调用)后期子类的特有内容.
3.多态的前提
1必须有关系,继承或实现
2要有覆盖
4.instanceof 例如 Person p=new Person()
Person instanceof p 为true
==========================================
10-01-10
==========================================
1.多态中的静态函数
静态的话就会调用父类,因为new Zi()根本不会被调用.
2.内部类
1内部类可以直接访问外部类中的成员
2外部类要访问内部类,必须建立内部类的对象
3一般用于类的设计
4分析事物时,发现该事物描述中还有事物,而且这个事物还在访问被描述事物的内容,这时就把还有的事物定义成内部类来描述.
3.内部类生成的class文件是Outer$inner.class
外部访问内部可以创建方法,创建内部类再访问
4.如果静态内部类,加载外部类时,内部类直接存在.就相当于一个外部类.注意:内部类中不能有静态成员.内部类在局部位置上只能访问局部中被final修饰的局部变量
==========================================
10-1-15
==========================================
1.匿名内部类就是内部类的简写格式
有前提:
内部类必须继承或者实现一个外部类或者接口
2.没名字怎么new呢?
必须有个明确的父类,所以必须继承或者实现一个外部类或者接口.
3.为什么不能创建抽象对象,因为有抽象方法.
如果想创建抽象对象,要先复写抽象方法.
所以 new Demo(){void show(){}};
就可以创建抽象对象Demo,这个Demo是子类.
4.匿名内部类其实就是一个匿名子类对象.
1new一个父类或接口
2复写里面的方法
3可以写其他方法
5.因为是创建匿名对象,可以直接在后面调用里面的方法.类里可以创建对象,方法里也可以创建对象.
==========================================
10-1-16
==========================================
1.如何实现一个匿名对象里的多个方法
那就用父类对象new.
Inter in=new Inter(){}
in.show1();
in.show2();
2.通常使用场景之一:
当函数参数是接口类型时,而且接口中的方法不超过三(不包含3),可以用匿名内部类作为实际参数进行传递.方法太多就失去阅读性.
==========================================
10-1-17
==========================================
1.在主函数中new Inner(); 为什么不行
因为主函数不能直接访问自己的非静态的内部类Inner.
2.如果是用父类来命名,那么父类中有几个方法就只能用几个方法.
Inter in=new Inter(){}
3.可以直接new Object(){}
但是一样不能命名.
4.创建的是匿名子类对象,所以命名时,那么子类对象就向上转型了,那么就不能使用子类方法了.
==========================================
10-1-18
==========================================
1.内存图解综合一下
先出来show...0,然后是constructor...9,
因为new的时候显示初始化还没有进行,先是默认初始化0,super走了show(),但是这时候还没有显示初始化,所以显示初始化在super()后面.
2.上次自己发现不能在类中直接写执行代码,原来只要加一个大括号,就可以直接写,而且会在构造函数之前执行.
3.当在局部代码块里面int num时,就是他自己的num,当他改变了num,就是类的num.
4.c9,f,s10,z10错误
f,s0,c9,z10正确
如果父类有aaa,那么
aaa,f,s0,c9,z10
原因:
其实上面说的构造代码块就是显示初始化的后面,之前是因为有super,但是没有父类对象,所以super执行完了就进行显示初始化.
现在有了父类对象,所以先执行super,也就是父类构造函数执行完了,就进行显示初始化,然后再运行子类super后的语句.
5.所以,1super,2显示初始化,3构造代码块初始化
相关文章推荐
- 黑马程序员----九-面向对象四
- 黑马程序员----八-面向对象三
- 黑马程序员----五-数组
- 黑马程序员----四-语句函数数组
- 自学中遇到问题怎么办
- 黑马程序员 protocol协议基本知识
- 面试小结
- 【转】程序员为什么跳槽
- 黑马程序员 贪心法则的应用及简单理解
- 黑马程序员 一位数组的基本知识总结
- 技术人员的疆域
- 黑马程序员 NSlog和printf的区别
- 黑马程序员 OC中的block的基础理解
- java事务的类型——面试被问到
- 在开源“集市”工作时如何建立一个职业网络
- 怎样实现由专有环境向开源环境的职业转变
- 一次神秘而有趣的面试,让我进了 Google!
- 转:迅雷亲历面经:笔试+上机+面试(完整JAVA面试题求解大讨论)
- 一个PHP程序员应该掌握的10项技能!
- 一个PHP程序员应该掌握的10项技能!