Java面向对象技术的三大特性之一:继承性。
Java中继承的定义:从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
关键词:extends implements
一,extends
在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,定义格式如下
class 父类 (){
}
class 子类 extends 父类(){
}
子类可以继承父类的属性和方法,通过继承,子类代码也更加简洁,提高代码的复用,首先看一下没有继承时的代码:
public class Bird {
//Bird的属性
String name;
int age;
public Bird (String name,int age) {
this.name=name;
this.age=age;
}
//Bird方法
public void eat() {
System.out.println(name+"正在吃");
}
public void sleep() {
System.out.println(name+"正在睡");
}
public void intro() {
System.out.println("我的名字是"+name+","+"我的年龄是"+age);
}
}
public class Dog {
//Dog的属性
String name;
int age;
public Dog (String name,int age) {
this.name=name;
this.age=age;
}
//Dog方法
public void eat() {
System.out.println(name+"正在吃");
}
public void sleep() {
System.out.println(name+"正在睡");
}
public void intro() {
System.out.println("我的名字是"+name+","+"我的年龄是"+age);
}
}
再来看一下继承时的代码:
Animal类(父类)
public class Animal {
//Animal的属性
String name;
int age;
public Animal(String name,int age) {
this.name=name;
this.age=age;
}
//Animal方法
public void eat() {
System.out.println(name+"正在吃");
}
public void sleep() {
System.out.println(name+"正在睡");
}
public void intro() {
System.out.println("我的名字是"+name+","+"我的年龄是"+age);
}
}
Bird类(子类):
public class Bird extends Animal {
public Bird(String name, int age) {
super(name, age);
}
}
Dog类(子类):
public class Dog extends Animal {
public Dog(String name, int age) {
super(name, age);
}
}
通过上面的代码,我们可以看出继承的重要性。代码中子类用到了一个关键词super。当前的子类与其直接父类在构造方面存在约束关系,用简单的话来说,子类的的构造方法中必须调用其直接父类的构造方法,格式如下:
public class A extends B (){
public A(定义的参数列表){
super(调用参数列表);
}
}
除此之外,还有this关键字,这是指向自己的引用
需要注意的是 Java 不支持多继承,但支持多重继承。比如B extends A,C extends B,这是可以的,但C extends A,B是不可以的。也可以多个类继承同一个类。
二,implements
使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔),格式如下
public interface A {
}
public interface B {
}
public class C implements A,B {
}
C也可以继承接口A,B的属性和方法。
注意:1.有final修饰的类不能被继承
2.当一个类中没有extends,implements时,默认继承Object(Object是所有类的父类)