面向对象个人总结一些易错知识
来源:互联网 发布:网络用语fu是什么意思 编辑:程序博客网 时间:2024/05/29 16:30
一、类的加载
(1)同一类的加载顺序
先加加载静态代码块(随着类的加载而加载)
再加载构造代码块(用于多个构造方法中相同的代码)
最后构造方法
(2)若一个子类继承一个父类,则在new子类对象的时候会先加载父类构造器,用super(...)调用,写在子类构造方法的第一行(不写默认为无参构造),。
例子:
class Fu {
static {
System.out.println("静态代码块Fu");
}
{
System.out.println("构造代码块Fu");
}
public Fu() {
System.out.println("构造方法Fu");
}
}
class Zi extends Fu {
static {
System.out.println("静态代码块Zi");
}
{
System.out.println("构造代码块Zi");
}
public Zi() {
System.out.println("构造方法Zi");
}
}
class ExtendsTest2 {
public static void main(String[] args) {
Zi z = new Zi();
}
}
结果是:
静态代码块Fu
静态代码块Zi
构造代码块Fu
构造方法Fu
构造代码块Zi
构造方法Zi
二、继承中子类方法访问成员变量,成员方法的特点
(1)直接使用this和super关键字分别访问子类或父类成员。
(2)若没有使用关键字
子类的方法会先在子类的成员范围找,有就使用,没有就再去父类的成员范围找。这也就意味着当子类有和父类同名的成员变量或成员方法(重写),若不使用super关 键字,会使用子类的成员。
三、多态
(1)多态的三要素
*继承或实现结构
*方法重写
*向上转型
(2)多态作用
*提高代码的维护性(继承体现)
*提高代码的扩展性(多态体现)
(3)理解多态
例:
class Father{
int age;
void enjoy(){
System.out.println(“看电视”);
}
}
Class Son extends Father{
Int age;
void enjoy(){
System.out.println(“踢球”);
}
}
进行向上转型用父类引用指向之类对象,Father f=new Son(),按照之前的理解,父类引用f应该只能访问到子类对象中的父类构造器那一部分,所以f只能调用父类有的变量和方法。
然而在实际使用过程中,f在调用成员变量age时调用的确实是父类Father的age,但在调用enjoy()方法时却是调用子类重写的方法,会出现这种情况也是重写和多态的意义所在
(4)动态绑定机制
为什么会产生这样的上述的情况。
首先方法和成员变量不同,方法存在于方法区中,当父类引用f找到子类中的父类构造器后,在父类构造器中会有一个指向方法区中父类Father的enjoy()方法的指针,但是在程序运行期间当在new Son()对象的时候,指向Father的enjoy()方法的指针会根据对象本身去寻找子类是否有重写该方法,有则该指针指向重写后的方法。这就是动态绑定机制。
- 面向对象个人总结一些易错知识
- 面向对象知识总结
- 面向对象知识总结
- 面向对象知识总结
- 对JAVA的一些个人总结——面向对象
- 面向对象的一些知识
- 面向对象的一些知识
- 面向对象阶段个人总结
- 面向对象的个人总结
- Java面向对象知识总结
- PHP面向对象知识总结
- Java面向对象知识总结
- javascript中面向对象中对象,属性,原型链和一些扩展知识总结
- 个人总结的一些链表知识
- 黑马程序员-java 面向对象【个人总结】
- javase面向对象个人小总结
- 黑马程序员——面向对象的一些小概念知识总结
- c#面向对象: 索引器知识总结
- STM32CubeMx基本说明
- 4.4.4 Android animation List 实现充能塔的效果
- 杭电5053
- 九度OJ 1451-1460(10/10)
- hibernate总结---session与object
- 面向对象个人总结一些易错知识
- [C/C++] 常用算法
- git 总结 -- 本地操作篇
- 一个例子看懂递归
- GridView视图(BaseAdapter)
- bzoj1901 动态主席树
- FJ的字符串
- Cramtool之工具搭建和处理1000genomes中的.cram文件
- opencv基础数据结构