如何实现向下转型?需要注意什么问题?如何解决此问题?
- 使用强转符:()
- Person p = new Man();
- Man m = (Man)p;
- 可能出现ClassCastException的异常。
- 使用instanceof在进行向下转型前判断。
- if(p instanceof Man){ }
- 使用instanceof在进行向下转型前判断。
== 和 equals()有何区别?
-
==: 判断两个变量或实例是不是指向同一个内存空间
-
equals(): 判断两个变量或实例所指向的内存空间的值是不是相同
//重写equals() class User{ String nmae;int age; ↓ } public boolean equals(Object obj){ if(obj == this){ return false; } if(obj instanceof User){ User u = (User)obj; return this.age = u.age && this.name.equals(u.name); } return false; }
基本数据类型,包装类与String三者之间的转换
-
自动装箱,自动拆箱
Integer i = 10;
基本数据类型,包装类---->String : valueOf(Xxx xx)
String---->基本数据类型,包装类 : parseXxx(String s)
多态性
-
向上转型–多态性
-
向下转型:
- why?:有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法,但是由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法。子类特有属性和方法不能调用
- how :使用强制类型转换符()
- tips: ClassCastException,避免此异常发生可加instanceof判断
-
理解:封装:属性功能封装在类里面,四种权限修饰去描述
继承性:类和类之间产生关系,达到代码的重用
多态性:实现代码的通用性-Object类中,定义的equals()方法。不
光能放Object类型还能放它的子类
多态是 运行时行为