Java继承图解(5大特点与实现例子详解)

Java继承图解(5大特点与实现例子详解)-mikechen

面向对象三大特征,分别是继承、封装和多态,继承可以降低代码编写的冗余度,提高编程的效率@mikechen

继承定义

继承(英语:inheritance)是面向对象软件技术中的一个概念,继承就是子类继承父类的特征和行为,使得子类对象具有父类的实例域和方法。

继承它使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。

在生活中,我们所理解的“继承”更多的是“子承父业”,就是儿子与父亲之间存在“继承”关系。

Java继承图解(5大特点与实现例子详解)-mikechen

 

为什么需要继承

在生活中,很显然,儿子继承父亲的财产,可以少奋斗几十年甚至几辈子。

在编程中,继承有什么作用呢?如果仅仅只有两三个类,每个类的属性和方法很有限的情况下确实没必要实现继承。

但事情并非如此,事实上一个系统中往往有很多个类并且有着很多相似之处,比如学生和老师同属人,各个类可能又有很多个相同的属性和方法,这样的话如果每个类都重新写不仅代码显得很乱,代码工作量也很大。

这时继承的优势就出来了,可以直接使用父类的属性和方法,自己也可以有自己新的属性和方法满足拓展,父类的方法如果自己有需求更改也可以重写。

Java继承图解(5大特点与实现例子详解)-mikechen

这样使用继承不仅大大的减少了代码量,也使得代码结构更加清晰可见,这就是继承存在的价值,大写的重点,好哇。

 

继承特性

  • 子类拥有父类非 private 的属性、方法;
  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展;
  • 子类可以用自己的方式实现父类的方法;
  • Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类
  • 多重继承就是,例如 A 类继承 B 类,B 类继承 C 类,所以按照关系就是 C 类是 B 类的父类,B 类是 A 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。

 

继承实现举例

在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下:

class 父类{

... //成员变量、成员方法

}
class 子类 extends 父类{

... //类体

}

下面我们一起来看一个现实中的例子:狗和猫都是动物,如果将狗、猫作为类,它们可以继承动物类很多的共同特性和行为。

Java继承图解(5大特点与实现例子详解)-mikechen

1)动物类

/** 
* 面向对象:继承 
* @author mikechen 
* */
class Animal{  
    private String name;  
    public void setName(String name){  
        this.name = name;  
    }  
    public String getName(){  
        return this.name;  
    }   
}

2)狗类

/**  
* 面向对象:继承 
* @author mikechen  
* */

class Dog{  
    private String name;  
    private String sound;  
    public void setName(String name){  
        this.name = name;  
    }  
    public void setSound(String sound){  
        this.sound = sound;  
    }  
    public String getName(){  
        return this.name;  
    }   
    public String getSound(){  
        return this.sound;  
    }  
}

3)引入继承

/**  
* 面向对象:继承 
* @author mikechen  
* */

class Animal{  
    private String name;  
    public void setName(String name){  
        this.name = name;  
    }  
    public String getName(){  
        return this.name;  
    }   
}  
class Dog extends Animal{}  
​  
public class Test{  
    public static void main(String[] args){  
        Dog dog= new Dog();  
        dog.setName("狗");  
        System.out.println(dog.getName());  
    }  
}

我们可以看出,子类可以在不扩展操作的情况下,使用父类的属性和功能。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法