(1)在Java中,类只支持单继承,不允许多重继承,也就是说一个类只能有一个直接父类,例如下面这种情况是不合法的。
class A{}
class B{}
class C extends A,B{} // C类不可以同时继承A类和B类
(2)多个类可以继承同一个父类,例如下面这种情况是允许的。
class A{}
class B extends A{}
class C extends A{} // 类B和类C都可以继承类A
(3)在Java中,多层继承是可以的,即一个类的父类可以再去继承另外的父类,例如下面这种情况是允许的。
class A{}
class B extends A{} // 类B继承类A,类B是类A的子类
class C extends B{} // 类C继承类B,类C是类B的子类,同时也是类A的子类
(4)在Java中,子类和父类是一种相对概念,也就是说,一个类是某个类父类的同时,也可以是另一个类的子类。例如上面的第3个示例中,B类是A类的子类,同时又是C类的父类。
重写父类方法
注意:
子类重写父类方法时,不能使用比父类中被重写的方法更严格的访问权限。如:父类中的方法访问权限是public,子类重写父类该方法的访问权限就不能是private。
super关键字
(1)使用super关键字调用父类的成员变量和成员方法,具体格式如下:
super.成员变量
super.成员方法([参数1,参数2...])
(2)使用super关键字调用父类的构造方法,具体格式如下:
super([参数1,参数2...])
需要注意的是,通过super调用父类构造方法的代码必须位于子类构造方法的第一行,并且只能出现一次,否则程序在编译期间就会报错。
在子类的构造方法中一定会调用父类的某个构造方法。这时可以在子类的构造方法中通过super关键字指定调用父类的哪个构造方法,如果没有指定,在实例化子类对象时,会默认调用父类无参的构造方法,而在文件2中,父类Animal中只定义了有参构造方法,未定义无参构造方法,所以在子类默认调用父类无参构造方法时就会出错。
结论:
在定义一个类时,如果没有特殊需求,当定义了有参构造方法后,尽量在类中再显示地定义一个无参构造方法,这样可以避免该类被继承时出现错误。
Object类
表1 Object类的常用方法
方法声明 | 功能描述 |
boolean equals(Object) | 判断某个对象与此对象是否相等 |
final Class<?> getClass() | 返回此Object的运行时类 |
int hashCode() | 返回该对象的哈希码值 |
String toString() | 返回该对象的字符串表示 |
void finalize() | 垃圾回收器调用此方法来清理没有被任何引用变量所引用对象的资源 |
Object类的toString()方法中输出信息具体格式如下:
getClass().getName() + "@" + Integer.toHexString(hashCode());
● getClass().getName():代表返回对象所属类的类名,即包名+类名的全限定名称。
● hashCode():代表返回该对象的哈希值。
● Integer.toHexString(hashCode()):代表将对象的哈希值用16进制表示。其中,
hashCode()是Object类中定义的一个方法,这个方法将对象的内存地址进行哈希
若有收获,就点个赞吧