首先我们需要了解继承是java面向对象重要的基石,原因是它允许创建分等级层次的类。
而继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为
特别是在工作java程序开发中继承显得更为重要,这是为什么呢?
比如生活中的例子:
鸡、鸭、鹅等这些可以看做是家禽类;
狮子、老虎凳可以看做野兽类;
而它们又都是动物,所以还可以看做是动物类;
所以继承需要符合is-a的关系,父类更通用、子类更具体
可是,虽然家禽类动物和野兽类动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性。

类的继承格式
在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下:
class 父类{
class 子类 extends 父类{
}
}
而我们为什么需要继承呢?
接下来我们通过实例来说明这个需求。
开发动物类,其中动物分别为企鹅以及小狗,要求如下:

  • 企鹅:属性(姓名,id),方法(吃,睡,自我介绍)
  • 小狗:属性(姓名,id),方法(吃,睡,自我介绍)

企鹅类:
package com;

public class Penguin{
private String name;
private int id;
public Penguin(String myName, int myId){ //构造方法时,其中参数之间用逗号隔开
name = myName;
id = myId;
}
public void eat(){
System.out.println(name+“正在吃”);
}
public void sleep(){
System.out.println(name+“正在睡”);
}
public void introduction(){
System.out.println(“大家好!我是”+id+“号”+name+"。");
}

}


小狗类:
package com;

public class Dogs {
private String name;
private int id;
public Dogs(String myName,int myId){
name = myName;
id = myId;
}
public void eat(){
System.out.println(name+“正在吃”);
}
public void sleep(){
System.out.println(name+“正在睡”);
}
public void introduction(){
System.out.println(“大家好!我是”+id+“号”+name+"。");
}
}


从这两段代码可以看出来,代码存在重复了,导致后果就是代码量大且臃肿,而且维护性不高(维护性主要是后期需要修改的时候,就需要修改很多的代码,容易出错),所以要从根本上解决这两段代码的问题,就需要继承,将两段代码中相同的部分提取出来组成 一个父类:


公共父类:
package com;

public class Animal {
private String name;
private int id;
public Animal(String myName, int myid) {
name = myName;
id = myid;
}
public void eat(){
System.out.println(name+“正在吃”);
}
public void sleep(){
System.out.println(name+“正在睡”);
}
public void introduction() {
System.out.println(“大家好!我是” + id + “号” + name + “.”);
}
}


这个Animal类就可以作为一个父类,然后企鹅类和小狗类继承这个类之后,就具有父类当中的属性和方法,子类就不会存在重复的代码,维护性也提高,代码也更加简洁,提高代码的复用性(复用性主要是可以多次使用,不用再多次写同样的代码)继承之后的代码:


企鹅类:
public class Penguin extends Animal{ //将Penguin作为子类,Animal作为父类,子类继承父类
public Penguin(String myName,int myId){
super(myName,myId); //用super关键字访问父类的构造方法
}
}


小狗类:
public class Penguin extends Animal{ //将Penguin作为子类,Animal作为父类,子类继承父类
public Penguin(String myName,int myId){
super(myName,myId); //用super关键字访问父类的构造方法
}
}


继承类型
需要注意的是java不支持多继承,但支持多重继承,即:
Java中为什么需要继承?
[注:该图借鉴自菜鸟教程]
继承的特性

  • 子类拥有父类private的属性、方法
  • 子类可以拥有自己的属性与方法,即子类可以对父类进行扩展
  • 子类可以用自己的方式实现父类的方法
  • java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承
    就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类,这是java继承区别于C++继承的一个特性。
  • 继承提高了类之间的耦合性(继承的缺点就是耦合度越高就会造成代码之间的联系越紧密导致代码的对立性越差)
    (注:什么是耦合?答:耦合:简单的说,
    举例:有一个类A其中有一个方法是用类B的方法做一些逻辑,或者A中有一个成员变量是类B的类型,也就是A的实现依赖于B,这样就是两个类互相耦合;再大一点,模块之间,系统之间都可以存在这样的关系…
    耦合相反的概念就是内聚,内聚就是自己独立实现某一功能的能力;
    接着上面的例子,假设类A没有依赖其他类(当然工具类什么的不算哦,指的你开发的其它类)实现了一个功能,那类A对于这个功能就是高内聚的…
    开发中讲究的是高内聚,低耦合;为啥?如果类A依赖类B,那如果B有一天改变了,那么A中起初设想的功能也跟着变了,导致A,B都要你去修改,工程量大了你就知道这是多么痛苦的一件事情了…)

相关文章:

  • 2021-06-19
  • 2022-12-23
  • 2022-12-23
  • 2021-12-15
  • 2022-12-23
  • 2021-06-28
  • 2021-06-08
  • 2022-12-23
猜你喜欢
  • 2021-07-13
  • 2021-06-17
  • 2022-12-23
  • 2021-10-26
  • 2021-10-25
  • 2021-04-06
  • 2021-12-05
相关资源
相似解决方案