继承的语法:
修饰符 SubClass extends SuperClass {
//类定义部分
}
继承(inheritance)通过extends关键字来实现,其中SubClass称为子类,SuperClass称为父类,基类或超类。修饰符如果是public,则该类在整个项目中可见;若无public修饰符,则该类只在当前包可见;不可以使用private和protected修饰类。
Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。比如可以分隔符先定义一个类叫车,车有以下属性:车体大小,颜色,方向盘,轮胎,而又由车这个类派生出轿车和卡车两个类,为轿车添加一个小后备箱,而为卡车添加一个大货箱。
类和类之间的继承关系可以用UML符号表示,其中父类又叫超类或基类,子类又叫派生类。父类是子类的一般化,子类是父类的特化(具体化)。
JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,同时一个类可以实现多个接口,从而克服单继承的缺点。
在面向对象程序设计中运用继承原则,就是在每个由一般类和特殊类形成的一般——特殊结构中,把一般类的对象实例和所有特殊类的对象实例都共同具有的属性和操作一次性地在一般类中进行显式的定义,在特殊类中不再重复地定义一般类中已经定义的东西,但是在语义上,特殊类却自动地、隐含地拥有它的一般类(以及所有更上层的一般类)中定义的属性和操作。特殊类的对象拥有其一般类的全部或部分属性与方法,称作特殊类对一般类的继承。
继承所表达的就是一种对象类之间的相交关系,它使得某类对象可以继承另外一类对象的数据成员和成员方法。若类B继承类A,则属于B的对象便具有类A的全部或部分性质(数据属性)和功能(操作),我们称被继承的类A为基类、父类或超类,而称继承类B为A的派生类或子类。
接一个例子
现有一个父类Pet
/** * 宠物类,狗狗和企鹅的父类 * @author 北大青鸟 */ public class Pet { private String name = "无名氏"; //昵称 private int health = 100; //健康值 private int love = 0; //亲密度 /** * 无参构造方法 */ public Pet(){ this.health = 95; System.out.println("执行宠物的无参构造方法"); } /** * 有参构造方法 * @param name 昵称 */ public Pet(String name){ this.name = name; } public String getName(){ return name; } public int getHealth(){ return health; } public int getLove(){ return love; } /** * 输出宠物信息 */ public void print(){ System.out.println("宠物的自白:\n我的名字叫" + this.name + ",我的健康值是" + this.health + ",我和主人的亲密程度是" + this.love + "。"); } }
又有一个子类 Dog
/** * 狗狗类,宠物的子类 * @author 北大青鸟 */ public class Dog extends Pet { private String strain;//品种 /** * 有参构造方法 * @param name 昵称 * @param strain 品种 */ public Dog(String name, String strain){ super(name); //此处不能使用this.name=name; this.strain = strain; } public String getStrain(){ return strain; } }
子类继承至父类,所以在main方法中可以用子类调用父类的方法
/** * 测试类,测试类的继承 * @param 北大青鸟 */ public static void main(String[] args) { // 1.创建宠物对象pet并输出信息 Pet pet = new Pet("贝贝"); pet.print(); // 2.创建狗狗对象dog比输出信息 Dog dog = new Dog("欧欧","雪纳瑞"); dog.print(); } }