什么是继承
把多个类中相同的成员给提取出来定义到一个独立的类中。然后让这多个类和该独立的类产生一个关系,这多个类就具备了这些内容,这个关系叫继承。
注意: java只支持单继承 . 使用的方式是extends关键字
生活中的继承
兔子和羊属于食草动物类,老虎和狮子属于食肉动物类
食草动物和食肉动物都属于动物类。
所以继承需要符合的关系是:is-a,父类更通用,子类更具体。
虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性
继承的语法
class Parent {
}
class Son extends Parent {
}
为什么需要继承
先看一个实例:
兔子:属性(姓名,年龄),方法(自我介绍,吃,睡)
老虎:属性(姓名,年龄),方法(自我介绍,吃,睡)
兔子类:
public class Rabbit {
private String name;
private int age;
public Rabbit(String name, int age) {
this.name = name;
this.age = age;
}
public void introduction() {
System.out.println("大家好!我是"+name+ ",今年"+age+"岁了。");
}
public void eat() {
System.out.println(name+"正在吃");
}
public void sleep() {
System.out.println(name+"正在睡");
}
}
老虎类:
public class Tiger {
private String name;
private int age;
public Rabbit(String name, int age) {
this.name = name;
this.age = age;
}
public void introduction() {
System.out.println("大家好!我是"+name+ ",今年"+age+"岁了。");
}
public void eat() {
System.out.println(name+"正在吃");
}
public void sleep() {
System.out.println(name+"正在睡");
}
}
可以看出来,代码存在重复了,导致后果就是代码量大且臃肿,而且维护性不高(维护性主要是后期需要修改的时候,就需要修改很多的代码,容易出错),所以要从根本上解决这两段代码的问题,就需要继承,将两段代码中相同的部分提取出来组成 一个父类:
public class Animal {
private String name;
private int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public void introduction() {
System.out.println("大家好!我是"+name+ ",今年"+age+"岁了。");
}
public void eat(){
System.out.println(name+"正在吃");
}
public void sleep(){
System.out.println(name+"正在睡");
}
}
这个Animal类就可以作为一个父类,然后兔子类和老虎类继承这个类之后,就具有父类当中的属性和方法,子类就不会存在重复的代码,维护性也提高,代码也更加简洁,提高代码的复用性
继承之后的代码:
兔子类:
public class Rabbit extends Animal {
public Rabbit(String name, int age) {
super(name, age);
}
}
老虎类:
public class Tiger extends Animal {
public Tiger(String name, int age) {
super(name, age);
}
}
继承的类型
单继承
多重继承
不同类继承同一个类
多继承(不支持)
为什么不支持多继承?
比如A类和B类里面都有一个同名函数,当C类继承了A、B类时,想要调用父类的函数,此时虚拟机不知道该调用A类的还是B类的
继承的特性
1、子类拥有父类非 private 的属性、方法。
2、子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
3、子类可以用自己的方式实现父类的方法。
4、Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 A 类继承 B 类,B 类继承 C 类,所以按照关系就是 C 类是 B 类的父类,B 类是 A 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。
5、提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)
继承的优缺点
优点:
1、代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性;
2、提高代码的复用性;
3、子类可以形似父类,但又异于父类;
4、提高代码的可扩展性,实现父类的方法就可以重写逻辑。
缺点:
1、继承是侵入性的。只要继承,就必须拥有父类的所有属性和方法;
2、降低代码的灵活性。子类必须拥有父类的属性和方法,让子类自由的世界中多了些约束;
3、耦合性提高了。当父类的常量、变量和方法被修改时,需要考虑子类的修改,而且在缺乏规范的环境下,这种修改可能带来非常糟糕的结果--------大段的代码需要重构
来源:CSDN
作者:梦之战
链接:https://blog.csdn.net/weixin_41661466/article/details/103210371