继承就是子类可以继承父类的属性和方法,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
Java只允许单根继承,所有类在没有显式声明父类的情况下,都是默认继承自Ojbect类。如下图所示:

==继承最大的好处就是提高了代码的可重用性。==
在java中使用关键extends来实现继承。属性一般使用protected修饰表示希望子类能继承使用。
例如:
public class Animal {
protected String gender; //动物的性别
protected int age; //动物的年龄
protected double weight; //动物的体重
protected double height; //动物的身高
public Animal() {
System.out.println("一个动物诞生了...");
}
public void bark() {
System.out.println("动物叫...");
}
}
public class Cat extends Animal {
}
public class Dog extends Animal {
}
public class Test {
public static void main(String[] args) {
Animal dog = new Dog();
Animal cat = new Cat();
dog.bark();
cat.bark();
}
}
运行结果:
一个动物诞生了...
一个动物诞生了...
动物叫...
动物叫...
子类不仅仅可以继承父类的属性和方法,也可以添加自己特有的属性和方法以体现出自己的个性。 例如:狗狗有别于其它动物,它会看大门。
代码如下:
public class Dog extends Animal {
public void watchDoor(){
System.out.println("正在看大门....");
}
}
public class Test {
public static void main(String[] args) {
Animal dog = new Dog();
Animal cat = new Cat();
dog.bark();
((Dog) dog).watchDoor();
cat.bark();
}
}
运行结果:
一个动物诞生了...
一个动物诞生了...
动物叫...
正在看大门....
动物叫...
上面的例子中虽然体现了狗狗的特殊本领"看大门",但是我们发现狗狗和小猫的叫声并没有什么区别,并没有体现出各自叫声的特色。为了体现不同的动物有不同的叫声,我们就需要使用方法重写(Override)。
所谓方法重写(Override):是指子类重写了从父类继承过来的方法。
方法重写要遵循以下规则:
1)方法重写必须要在有继承关系的子类中;
2)重写方法的名字必须和父类方法名字相同,参数列表相同(参数顺序,个数,类型),方法返回类型相同或者是其子类;
3)重写方法的访问修饰符是可以允许有变化的,但是访问范围要大于等于父类的访问范围;
4)重写方法不能抛出比父类更大范围的异常;(后面章节做详细探讨)
现在我们重写小猫和小狗类,如下:
public class Cat extends Animal {
@Override
public void bark() {
System.out.println("喵喵...");
}
}
public class Dog extends Animal {
@Override
public void bark() {
System.out.println("汪汪...");
}
public void watchDoor(){
System.out.println("正在看大门....");
}
}
public class Test {
public static void main(String[] args) {
Animal dog = new Dog();
Animal cat = new Cat();
dog.bark();
((Dog) dog).watchDoor();
cat.bark();
}
}
运行结果:
一个动物诞生了...
一个动物诞生了...
汪汪...
正在看大门....
喵喵...
上面使用的@Override注解表示该方法重写了父类的方法。该注解是一种检查性注解,用来检查重写方法是否符合以上规定的重写规则。
1)继承是指子类继承了父类的属性的方法。
2)继承的好处是提高了代码的可复用性。
3)Java只允许单个继承,也就是说一个类只能有一个父类,不显式声明父类的情况下,默认继承自Object.
4)子类也可以添加自己特有的属性和方法,以体现个性。
5)子类也可以重写从父类继承过来的方法,重写的目的也是为了体现子类的个性。