1.方法重写
方法重写也叫方法覆盖,需要满足下面的条件
1) 子类的方法的参数,方法名称,要和父类方法的参数,方法名称完全一样。
2) 子类方法的返回类型需要和父类方法返回类型一样,或者是父类返回类型的子类比如 父类 返回类型是 Object ,子类方法返回类型是String 。
3) 子类方法不能缩小父类方法的访问权限.
方法重写与方法重载比较;
2.多态
引出我们要讲解的多态-> 代码的复用性不高,而且不利于代码维护
多[多种]态[状态](polymorphic)基本介绍
- 方法或对象具有多种形态(多态)。是面向对象的第三大特征,多态是建立在封装和继承基础之上的。
多态的具体体现
1.方法的多态
重写和重载
2.对象的多态
一个对象的编译类型和运行类型不一致
Animal animal = new Dog(); 【Animal animal 就是编译类型,而 new Dog() 就是运行类型】[案例说明:]
3.多态的注意事项
- 多态的前提是:两个对象(类)存在继承关系
- 多态的向上转型
本质:父类的引用指向了子类的对象
1) 语法:父类类型 引用名 = new 子类类型();
2) 特点:编译看左边,运行看右边。可以调用父类类型中的所有成员,不能调用子类类型中特有成员;
3) 最终运行效果看子类的具体实现!
- 多态的向下转型
1) 语法:子类类型 引用名 = (子类类型)父类引用;
2) 只能强转父类的引用,不能强转父类的对象
3) 要求父类的引用必须指向的是当前目标类型的对象
4) 可以调用子类类型中所有的成员
- 属性没有重写之说!属性的值看编译类型,即属性没有动态绑定机制.
- instanceOf 比较操作符,用于判断某个对象的类型是否为XX类型或XX类型的子类型 【举例说明】
- 4.多态的综合案例
-
-
5.动态绑定机制
Java另一重要特性: 动态绑定机制
1) 当调用对象方法的时候,该方法会和该对象的内存地址绑定
2) 当调用对象属性时,没有动态绑定机制,哪里声明,那里使用
-
-
6.多态数组
-
//多态数组 , 可以存放多种数据类型的数组, 但是多种数据类型间存在继承关系
-
-
8.object类
- 9.equals
- ==和equals的对比
-
1) == :比较运算符,既可以判断基本类型,又可以判断引用类型
2) == :比较运算符,如果判断基本类型,判断的是值是否相等。示例:int i=10; double d=10.0; i==d true 【案例说明】
3)== :比较运算符,如果判断引用类型,判断的是地址是否相等.
4) equals: 是Object类中的方法,只能判断引用类型
5) 默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等。比如Integer,String
- 10.子类重写equals
- 没有重写:false
- 应用实例-如何重写equals方法:
判断两个Person对象的内容是否相等如果两个Person对象的各个属性值都一样,结果为true,反之为false。
代码演示: -
子类也可以和父类参加比较
-
11.hashCode方法
-
1) 提高具有哈希结构的容器的效率!
2) 两个引用,如果指向的是同一个对象,则哈希值肯定是一样的!
3) 两个引用,如果指向的是不同对象,则哈希值是不一样的
4) 哈希值主要根据地址号来的!, 不能完全将哈希值等价于地址。
5) 案例演示: obj.hashCode() [测试:A obj1 = new A(); A obj2 = new A(); A obj3 = obj1]
6) 后面在集合,中hashCode 会被重写Set...
-
12.toString方法
-
13. finalize方法
- 基本介绍
-
1) 当对象被回收时,系统自动调用该对象的finalize方法。子类可以重写该方法,做一些释放资源的操作【演示】
2) 什么时候被回收:当某个对象没有任何引用时,则jvm就认为这个对象是一个垃圾对象,就会使用垃圾回收机制来销毁该对象,在销毁该对象前,会先调用finalize方法。
3) 垃圾回收机制的调用,是由系统来决定, 也可以通过System.gc() 主动触发垃圾回收机制.
-
垃圾回收器:
-
断点调试:
-
1.1.1 断点调试介绍
断点调试是指自己在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后你可以一步一步往下调试,调试过程中可以看各个变量当前的值,出错的话,调试到出错的代码行即显示错误,停下。然后程序可以进行分析从而找到这个Bug