目录
Java 继承
一、继承的概念
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
简单来说,继承是把多个类中相同的内容给提取出来定义到一个类中。如何实现继承呢?
- Java提供了关键字:extends
二、继承格式
在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下:
class 父类 {
}
class 子类 extends 父类 {
}
为什么需要继承?
接下来我们通过简单实例来说明这个需求。
开发ExtendsDemo类,其中ExtendsDemo分别为Student以及Teacher,要求如下:
- Student:方法(吃饭,睡觉)
- Teacher:方法(吃饭,睡觉)
Student类:
class Student {
public void eat() {
System.out.println("吃饭");
}
public void sleep() {
System.out.println("睡觉");
}
}
Teacher类:
class Teacher {
public void eat() {
System.out.println("吃饭");
}
public void sleep() {
System.out.println("睡觉");
}
}
从这两段代码可以看出来,代码高度重复了,导致后果就是代码量大且臃肿,而且维护性不高(维护性主要是后期需要修改的时候,就需要修改很多的代码,容易出错),所以要从根本上解决这两段代码的问题,就需要继承,将两段代码中相同的部分提取出来组成 一个父类。
公共父类(Person类):
class Person {
public void eat() {
System.out.println("吃饭");
}
public void sleep() {
System.out.println("睡觉");
}
}
这个Person类就可以作为一个父类,然后Student类和Teacher类继承这个类之后,就具有父类当中的属性和方法,子类就不会存在重复的代码,维护性也提高,代码也更加简洁,提高代码的复用性(复用性主要是可以多次使用,不用再多次写同样的代码) 继承之后的代码:
class Student extends Person {}
class Teacher extends Person {}
完整代码如下:
//使用继承后
class Person {
public void eat() {
System.out.println("吃饭");
}
public void sleep() {
System.out.println("睡觉");
}
}
class Student extends Person {}
class Teacher extends Person {}
class ExtendsDemo {
public static void main(String[] args) {
Student s = new Student();
s.eat();
s.sleep();
System.out.println("-------------");
Teacher t = new Teacher();
t.eat();
t.sleep();
}
}
三、继承类型
需要注意的是: Java 不支持多继承,但支持多重继承。
Java中继承的特点:
1、 Java只支持单继承,不支持多继承。
有些语言是支持多继承,格式:extends 类1,类2,...
代码示例:
class Father {
}
class Mother {
}
class Son extends Father,Mother {
}
class ExtendsDemo1 {
Public static void main(String[] args) {
}
}
输出:
ExtendsDemo1.java:9: 错误: 需要'{'
class Son extends Father,Mother {
^
ExtendsDemo1.java:14: 错误: 需要<标识符>
Public static void main(String[] args) {
^
2 个错误
2、Java支持多层继承(继承体系)
代码示例:
class GrandFather {
public void show() {
System.out.println("我是Java");
}
}
class Father extends GrandFather {
public void method(){
System.out.println("我是Python");
}
}
class Son extends Father {}
class ExtendsDemo1 {
public static void main(String[] args) {
Son s = new Son();
s.method(); //使用父亲的
s.show(); //使用爷爷的
}
}
输出:
我是Python
我是Java
继承(下):https://blog.youkuaiyun.com/hewenqing1/article/details/103523730