继承
继承是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了由简单到复杂的认知过程。
利用继承,可以先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的新类,新类继承一般类的状态和行为,并根据需要增加自己的新的状态和行为。由继承而得到的类称为子类 ,被继承的类称为父类(超类)。
优点
利用继承可以有效地实现代码的重复使用,子类只需添加新的功能代码即可。
继承体现了一种先进的编程模式。子类可以继承父类的属性和功能,即继承了父类所具有的数据和数据上的操作,同时可以增加子类独有的数据和数据上的操作。比如“人类”继承了 “哺乳类”的属性和功能,又增加了人类独有的属性和功能。
关键字
继承关键字:extends
格式:
class 子类名 extends 父类名{
.......
}
示例
代码如下:
public class Animal {
String name ;
public void eat (String food){
System.out.println(name + "正在吃" + food);
}
}
public class Bird {
String name ;
public void eat (String food){
System.out.println(name + "正在吃" + food);
}
public void fly(){
System.out.println(name + "正在飞");
}
}
public class Cat {
String name ;
public void eat (String food){
System.out.println(name + "正在吃" + food);
}
public void jump(){
System.out.println(name + "正在跳");
}
}
关系
这个代码其中存在了大量的冗余代码。
可以看出,Animal、Cat、Bird具有以下一些关系:
1.这三个类都具有一个相同的eat方法,并且行为完全一样;
2.这三个类都具备一个相同的name属性,并且意义一样
3.从逻辑上讲,Cat和Bird都是同一种Animal;
此时就可以让 Cat 和 Bird 分别继承 Animal 类, 来达到代码重用的效果。则,Cat、Bird就是子类,Animal就是父类。
改进
对于上面的代码, 可以使用继承进行改进. 此时我们让 Cat 和 Bird 继承自 Animal 类, 那么 Cat 在定义的时候就不必再写 name 字段和 eat 方法
完整代码
//主函数
public class Main {
public static void main(String[] args) {
Cat cat = new Cat();
Bird bird = new Bird();
cat.name = "小黑";
cat.jump();
bird.name = "大黑";
bird.eat("肉");
}
}
//父类
public class Animal {
String name ;
public void eat (String food){
System.out.println(name + "正在吃" + food);
}
}
//子类
public class Bird extends Animal {
public void fly(){
System.out.println(name + "正在飞");
}
}
public class Cat extends Animal {
public void jump(){
System.out.println(name + "正在跳");
}
}
//输出为
小黑正在跳
大黑正在吃肉
Process finished with exit code 0
注意事项
1.java不支持多继承,即一个子类只能继承一个父类,否则就会报错,如上图。
2.子类会继承父类的所有 public 的字段和方法.
3.对于父类的 private 的字段和方法, 子类中是无法访问的