继承是Java面向对象思想一个很重要的组成部分,通过继承,我们不必关心别人帮我们做了什么,我们就直接可以拿来用了。
继承很容易理解,一个儿子使用了他爸爸的东西,这就可以算作继承。在Java中,继承是发生在类之间的,也就是说一个类继承另一个类,根据生活中的经验,一般是儿子继承父亲的东西,所以继承别人的那个类我们称之为子类,而被继承的类我们称之为父类,也称超类。一般情况下子类继承父类后可以无条件使用父类的属性和方法。
Java中通过extends
关键字进行继承,具体如下:
xxxxxxxxxx
public class 子类名 extends 父类名{ }
Java只支持单继承,也就是说一个儿子不能有两个父亲,一个子类只能继承一个父类;但是一个父亲可以有多个儿子。下面我们通过示例来更加形象地了解一下继承:
xxxxxxxxxx
//定义一个父类,再定义一个子类,继承父类。通过子类的main方法花掉20块钱,再获取父类的剩余钱的属性。
class father{
int moneyLeft=1000;
public void spend(int money) {
moneyLeft=moneyLeft-money;
System.out.println("花钱成功!共花费"+money+"元。");
}
}
public class son extends father{
public static void main(String[] args) {
father f=new father();
f.spend(20);
System.out.println("剩余"+f.moneyLeft+"元。");
}
}
运行结果如下:
xxxxxxxxxx
花钱成功!共花费20元。
剩余980元。
需要说明一下:一个Java文件里面只能有一个public类,且public类的类名必须与文件名相同,所有此处定义的father类没有用public修饰符。
继承的第一个作用就是开头引言所说的不需要了解别人干了什么,只管用就可以了。通过下面一个简单的例子就可以很直观地了解到继承的另一个作用了。现在有两种动物,一种是狗,另一种是羊,狗和羊都有吃这一个方法,都具有性别这一个属性,但是狗有吠的方法,而羊只有咩的方法,它们有相同点又有不同点,如果没有继承,我们需要通过以下代码实现:
xxxxxxxxxx
class 狗{
int 性别=0;
public void 吃(){
System.out.println("吃");
}
public void 吠(){
System.out.println("吠");
}
}
class 羊{
int 性别=0;
public void 吃(){
System.out.println("吃");
}
public void 咩(){
System.out.println("咩");
}
}
如果有了继承,我们可以定义一个动物
类,使狗和羊类继承动物类。动物类具有狗和羊的共同点,示例如下:
xxxxxxxxxx
class 动物{
int 性别=0;
public void 吃(){
System.out.println("吃");
}
}
class 狗 extends 动物{
public void 吠(){
System.out.println("狗在吠");
}
}
class 羊 extends 动物{
public void 咩(){
System.out.println("羊在咩");
}
}
通过继承,我们可以减少大量重复的代码,使得代码不那么臃肿。
super
和this
关键字super
和this
关键字常见于继承中。this用于访问本类(即自己)中的成员(属性、方法等统称成员),super则用来访问父类的成员。示例如下:
xxxxxxxxxx
class father{
boolean sex=true;
}
class son extends father{
int type=0;
System.out.println(super.sex);
System.out.println(this.type);
}
用final关键字修饰的类是不可用被继承的。
注:实例变量也可以被定义为 final,被定义为 final 的变量不能被修改。被声明为 final 类的方法自动地声明为 final,但是实例变量并不是 final