类的继承
1、概念和语法

概念

根据已有类来设计新类,新类具有已有类的所有功能(属性和行为)。
Java中只支持类的单继承,每个子类只能拥有一个直接超类。
超类是所有子类的公共属性和方法的集合;子类是超类的特殊化。
继承机制可以提高程序的抽象程度,提高代码的可重用性。
超类和子类

子类对象和超类对象的关系:是一种(个)……
子类对象
从外部看它应该包括
与超类相同的接口
可以就有更多的方法和数据成员
其内部包含着超类的所有属性和方法
语法

1
2
3
[ClassModifier] class ClassName extends SuperClassName {
//类体
}
子类不能直接访问从超类继承来的私有属性和方法,但可以使用公有(或保护)方法来访问(如果超类定义了的话)。

2、隐藏和覆盖

属性的隐藏

子类中声明了与超类中相同的成员变量名(实例变量)(静态属性不影响,因为他们都是一个)——从超类继承的变量将隐藏。这时子类中将有两个名字相同的变量,一个继承自超类,一个由自己声明。

当子类执行继承自超类的操作时,处理的时继承来的超类的变量
当子类执行自己声明的方法时,操作的是它自己声明的变量
访问被隐藏的属性

调用从超类继承来的方法
在本类中声明的方法访问需要使用 super.属性 访问
方法覆盖

如果子类不需要使用从超类继承来的方法,可以声明自己的同名方法,称为方法覆盖。

覆盖方法的返回类型、方法名称、参数个数必须和被覆盖的方法完全一致。访问权限可以更宽松,但不能更严格。

区分覆盖方法和被覆盖方法:在方法名前面使用不同的类名或不同的对象名即可区分。

方法覆盖的应用场合

子类中实现与超类相同的功能,但算法或公式不一样;
名字相同的方法中,要做比超类方法更多的事情;
子类中要取消从超类继承过来的方法。
注意事项

必须覆盖的方法:派生类必须覆盖基类中的抽象方法,否则派生类自身将成为抽象类
不能覆盖覆盖的方法:终结方法(final)、静态方法(static)
调用被覆盖的方法:super.被覆盖的方法名();
3、Object类

Object类是所有类的直接或间接超类,处于类层次的最高点,包含了所有Java类的公共属性和行为。

(1) getClass方法

获取当前对象所属类的信息,返回Class对象:

1
public final Class getClass()
返回的Class对象用来代表所属类,可以查询类的各种信息:名字、超类、实现接口的名字等等。

(2) toString方法

返回表示当前对象本身有关信息的字符串对象:

1
2
3
4
//Object类中实现的toString方法
public String toString() {
return getClass().getName() + “@” + Integer.toHexString(hashCode());
}
(3) equals方法

比较两个对象引用是否指向同一个对象:

1
2
3
4
//Object类中实现的equals方法
public boolean equals(Object obj) {
return (this == obj);
}
相等和同一

相等(equal):两个对象类型相同,属性值相同。
同一(identical):两个引用变量指向的是同一对象。
同一肯定相等,相等不一定同一。
比较运算符 == 判断两个对象是否同一。
equals方法:判断两个对象引用是否同一(this == obj)

String类覆盖了equals方法:可以比较两个字符串对象是否相等。

覆盖equals方法实现对象相等比较

原型必须和Object类中的一样,即:

1
public boolean equals(Object obj)
注意到形参为Object对象,并不知道其具体类型,方法体中首先要比较两者类型是否相同:

1
2
if (this.getClass() != obj.getClass())
return false;
在类型相同的情况下,将obj强制转换成当前类型,之后初始化当前类型的引用:

1
ClassName b = (ClassName) obj;
最后分别比较两者的属性值。

或者使用 instanceof 运算符:

1
2
3
4
5
if(obj instanceof ClassName) {
ClassName b = (ClassName) obj;
//分别比较两者的属性值
}
return false;
(4) clone方法

复制当前对象,并返回副本:

1
protected Object clone()
使用clone方法复制对象

覆盖为public方法:在Object类中被定义为了protected方法(类外不能访问),需要覆盖为public。

实现 Cloneable 接口,赋予一个对象被复制的能力(cloneability)。

1
2
3
4
5
6
class ClassName implements Cloneable {
//……
public Object clone() {
//……
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值