1、继承是什么
继承,是面向对象语言的重要机制。
概念:一个类(子类)可以使用从另一个类(父类、超类)继承属性和方法。
Java中的继承是单一继承,即一个子类只能有一个父类。
当然,接口(interface)也可以继承。
了解什么是类看这里:类、对象到底有什么秘密
了解接口的概念看这里:java接口到底是什么
接口和抽象类的区别看这:接口和抽象类有什么区别
2、如何使用继承
广义上讲,继承类、继承抽象类、实现接口都可以称为继承,但目前所说的java继承只是继承类或抽象类,即is-a模式最直接的体现。
了解更多is-a模式看这里:is-a,has-a,like-a是什么
继承类、抽象类使用extends关键字,实现接口使用implements关键字。通过使用这些关键字,我们可以使一个对象获得另一个对象的属性及方法。
例如:
public class Animal{
}
public class Mammal extends Animal{
}
public class Reptile extends Animal{
}
public class Dog extends Mammal{
}
根据上面的例子,面向对象的术语即:
- 动物是哺乳动物类的父类。
- 动物是爬虫类的父类。
- 哺乳动物和爬行动物是动物类的子类。
- 狗是哺乳动物双方和动物类的子类。
- 因此:狗也是动物的子类。
使用这个例子:
public class Dog extends Mammal{
public static void main(String args[]){
Animal a = new Animal();
Mammal m = new Mammal();
Dog d = new Dog();
System.out.println(m instanceof Animal);
System.out.println(d instanceof Mammal);
System.out.println(d instanceof Animal);
}
}
这将产生以下结果:
true
true
true
要注意的一个非常重要的事实是,Java只支持单一继承。这意味着,一个类不能扩展多个类。因此,以下是非法的:
public class extends Animal, Mammal{
}
3、如何继承接口
接口也可以扩展另一个接口,类似于一个类扩展另一个类中的方法。同样使用extends关键字来扩展接口,使子接口继承父接口的方法。
下面的Sports接口是由Hockey和Football接口扩展。
public interface Sports
{
public void setHomeTeam(String name);
public void setVisitingTeam(String name);
}
public interface Football extends Sports
{
public void homeTeamScored(int points);
public void visitingTeamScored(int points);
public void endOfQuarter(int quarter);
}
public interface Hockey extends Sports
{
public void homeGoalScored();
public void visitingGoalScored();
public void endOfPeriod(int period);
public void overtimePeriod(int ot);
}
Hockey接口有四个方法,但它继承了两个Sports接口的方法,因此,实现Hockey类需要实现六个方法。同样地,一个实现Football类需要实现Football的三个方法,以及Sports的两个方法。
4、java如何多重继承
我们知道,一个java类只能继承一个父类,所以,多重继承是不允许的。
但是,一个接口可以扩展多个父接口。
例如,Sports和Event都是接口:
public interface Hockey extends Sports, Event