1.instanceof
- 判断对象类型(子类是否继承父类)
- 如果父类对象不是子类对象的实例,就会发生ClassCastException异常,
- 所以在执行向下转型是要使用instanceof来判断父类对象是否为子类对象的实例
- 返回布尔值表示两者之间的关系
2.向下转型
- 将较抽象的类转换成较具体的类
- 不能说所有的鸟类都是鸽子
- 不能说所有的四边形都是平行四边形
- 可以说子类对象总是父类的一个实例,但父类对象的实例不一定是子类对象的实例
3.向上转型
- 特殊类型到普通类型的转化,可能会丢失一些信息
- 平行四边形到转化到四边形,会丢失平行四边形的特性
4.Object类
- 所有类的父类,是Java层中最高层的类
- 所有创建的类都继承他,除非某个类已经指定要从其他类继承,否则他就从java.lang.object类继承而来
- 所有类都继承object类,定义是可省去extends object
常用方法:
- tostring() 可以将任何一个对象换成字符串返回
- equals(); 比较两个引用的虚拟地址,当且仅当两个引用物理上是同一个对象时返回true否则返回false
- hashcode()获取对象的哈希码值,为16进制
- == 比较两个字符的内容是否相同
绑定。当equals方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,
该协定声明相等对象必须具有相等的哈希码。
绑定原因。Hashtable实现一个哈希表,为了成功地在哈希表中存储和检索对象,
用作键的对象必须实现 hashCode 方法和 equals 方法。同(1),必须保证equals相等的对象,
hashCode 也相等。因为哈希表通过hashCode检索对象。、
默认。
- ==默认比较对象在JVM中的地址。
- hashCode 默认返回对象在JVM中的存储地址。
- equal比较对象,默认也是比较对象在JVM中的地址,同==
ComHashcode a = new ComHashcode();
ComHashcode b = new ComHashcode();
System.out.println(a.hashCode()); //870919696
System.out.println(b.hashCode()); //298792720
Long num1 = new Long(8);
Long num2 = new Long(8);
System.out.println(num1.hashCode()); //8
System.out.println(num2.hashCode()); //8
System.out.println(num1.equal(num2));
5.抽象类
- 一般是父类
- 抽象类不能被实例化
- abstract创建抽象类
- 在抽象类中可以定义抽象方法
6.接口
- 接口实现:implements
- 是抽象类的延伸
- 接口中所有的方法都没有方法体
- draw()方法可以封装到一个接口中
- 使需要draw()的方法的类实现这个接口
- 同时也可以继承图形类,这是接口存在的必要性
- 接口可以实现多个,继承只有一个(单继承)
- 接口可以向上转型
7.方法重载
- 在同一个类中允许出现一个以上的同名方法,
- 只要这些方法参数个数或类型不同即可
8.多态
- 多态性是面向对象程序设计的重要部分,
- Java中通常使用重载(overloading)和重写(Overriding)实现类的多态性
9.继承
- 关键字:extends
- 它使整个程序框架具有一定的弹性
- 在程序中复用一些已经完善定义的类不仅可以减少软件开发周期,
- 同时也可以提高软件的可维护性和可扩展性。