子类对象实例化的过程
面向对象的特征之三:多态性
多态性
在Java中,多态时指不同类的对象在调用同一个方法时所呈现出的多种不同行为。通常来说,在一个类中定义的属性和方法被其他类继承或重写后,当把子类对象直接赋值给父类引用变量时,相同引用类型的变量调用同一方法所呈现的多种不同形态。通过多态,消除了类之间的耦合关系,大大提高了程序的可扩展性和可维护性。
Java的多态性是由类的继承、方法重写以及父类引用指向子类对象体现的。由于一个父类可以有多个子类,多个子类都可以重写父类方法,并且多个不同的子类对象也可以指向同一个父类。这样,程序只有在运行时程序才能知道具体代表的时哪个子类对象,这就体现了多态性。
多态性是面向对象中重要的概念,在Java中有两种体现:
1、方法的重载(overload)和重写(overwrite)。
2、对象的多态性,可以直接应用在抽象类和接口上。
Java引用变量有两种类型:
父类数据类型不能强制转换成子类
兄弟类之间不能强转换
Object类的使用
在Java中提供了一个Object类,它是所有类的父亲,即每个类都直接或间接继承自该类,因此Object类通常被称为超类、基类或根类。当定义一个类时,如果没有使用extends关键字为这个类显示地指定父类,那么该类会默认继承Object类。
Object类的toString()方法中输出信息具体格式如下:
getClass().getName()+"@"+Integer.toHexString(hashCode());
1、getClass().getName()代表返回对象所属类的类名,即包名+类名的全限定名称。
2、hashCode()代表返回该对象的哈希值。
3、Integer.toHexString(hashCode())代表将对象的哈希值用十六进制表示。
其中,hashCode()时Object类中定义的一个方法,这个方法将对象的内存地址进行哈希运算,返回一个int类型的哈希值。