JAVA中存在一种特殊机制叫做继承,如同儿子继承父亲的工作一样,子类也可以继承父类的一切东西,其语法形式为
class A{
}
class B extends A{
}
此处A为B的父类,父类除名字之外的所有东西都可以被继承,可以参考下面这些代码
public class Animal {
public String name;
public Animal(String name) {
this.name = name;
}
public void eat(String food) {
System.out.println(this.name + "正在吃" + food);
}
}
class Cat extends Animal{
public String name;
public Cat(String name) {
this.name = name;
}
public void eat(String food) {
System.out.println(this.name + "正在吃" + food);
}
}
这两个类在使用时,根据初始化的函数不同,调用的函数也不同,例如
Animal cat = new Cat("喵喵");
Animal animal = new Animal("汪汪");
cat.eat("fash");
animal.eat("food");
此时,两个都是Animal类,但运行调用的函数却不一样,初始化使用Cat的cat,调用的是类Cat里面的eat函数,而animal调用的是Animal里面的eat函数。
另外,当子类在初始化的时候,必须先给父类初始化才能正常使用,此处有专门的关键词super,具体用法可以参考下面代码
public class Animal {
public String name;
public Animal(String name) {
this.name = name;
}
public void eat(String food) {
System.out.println(this.name + "正在吃" + food);
}
}
class Cat extends Animal{
public String name;
public Cat(String name) {
super(name);
}
public void eat(String food) {
System.out.println(this.name + "正在吃" + food);
}
}
以上就是继承的大致使用方法,而接口则是站在继承之上的另一处拓展,接口的关键词是interface,而类似于普通类中的extends,则是implement关键词
interface IShape {
void draw();
}
class Cycle implements IShape {
@Override
public void draw() {
System.out.println("○");
}
}
值得注意的是接口中的常量的属性默认为public static final 即使书写时省略了,也会是这个属性。
由于接口的方便,有一种类叫抽象类使用abstract来定义,此种类无法实例化,只能用来继承,因此常用来制作接口。