代码中创建的类,主要是为了抽象现实中的一些事物(包含属性和方法)。有的时候客观事物之间就存在一些关联,进而推之类和类之间也存在某些关联。例如,对于猫咪来说,其属于动物的范畴,如果此时需要实现动物和猫咪吃东西和猫咪特有的喵喵叫,就会在编写代码的时候存在大量的重复的代码。
为了实现代码之间的复用,就引入了继承的关系。像动物这样被继承的类称之为父类,基类或者超类,对于猫咪这样的类,称之为子类,派生类。
基本语法
class 子类 extends 父类
通过继承的关系可以实现上述例子当中名字字段、吃东西方法等等的复用,代码如下:
class Animal{
private String name;
public Animal(String name){
this.name = name;
}
public void eat(String food){
System.out.println(this.name + "正在吃“+ food);
}
}
class Cat enxtends Animal{
public Cat(String name){
super(name);
}
public void meow(){
System.out.println(this.name + "喵喵叫“);
}
}
public class ExtendsDemo01{
public static void main(String[] args){
Cat cat = new Cat("小花“);
cat.eat("小鱼干");
cat.meow();
}
}
---------------------------------
当使用extends关键字进行指定继承父类时,只能有一个父类,子类会继承父类当中所有被public修饰的字段和方法。子类的实例当中,也包含着父类的实例,可以使用super关键字来得到父类实例的引用。
protected关键字
如果将字段或者方法设置为private ,则子类将不能访问该字段以及方法。但是如果设置为public ,有违封装的初衷。因此引入了新的关键字protected 。
对于类的调用者来说, protected 修饰的字段和方法是不能访问的。
对于类的 子类 和 同一个包的其他类 来说, protected 修饰的字段和方法是可以访问的。
更复杂的继承关系
动物当中有猫,猫又被分为中华田园猫、布偶猫等,中华田园猫又被分为狸花猫、橘猫等。这样一层层之间的联系能够例举出橘猫继承了中华田园猫,中华田园猫继承了猫这一父类。这样的继承方式称为多层继承,即子类还可以继续派生出新的子类。
final关键字
final 如果修饰变量或者字段时,表示的是常量,不能被修改。
final也能够修饰类,此时该类就不能够被继承。final关键字的功能就是限制类被继承。
组合
和继承类似,组合也是一种表达类之间关系的方式,也能够达到代码复用的效果。
例如学校和学生、老师之间的关系。
class Student{
...
}
class Teacher{
...
}
class School{
public Student[] students;
publc Teacher[] teacher;
}
组合并没有涉及到特殊的语法,仅仅是将一个类的实例作为另一个类的字段,这是设计类的常用方式之一。