解析java中的继承

1 含义

在符合当代社会的约定俗成的逻辑的情况下,很多类具有相同的属性和方法,我们这些共有的属性和方法抽象成一个类后,通过extends关键字使得很多类与抽象成的类建立父子关系,其中很多类称为子类,抽象出来的类叫做父类

2 为什么需要继承?

2.1 减少代码的冗余,提高复用性

例如Chinese类Russian类都有namesexage这三个属性,

那么如果每个类都写的话,就是如下所示的代码

Chinese类

public class Chinese{private String name;private String sex;private int age;public Chinese() {}public Chinese(String name, String sex, int age) {this.name = name;this.sex = sex;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

Russian类

public class Russian {private String name;private String sex;private int age;public Russian() {}public Russian(String name, String sex, int age) {this.name = name;this.sex = sex;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

我们不难发现这两个类里面的一些属性其实是公共的,可以抽象成一个People类

改进后的代码如下所示

Chinese类

public class Chinese extends Peple{}

Russian类

public class Russian extends Peple{}

People类

public class Peple {private String name;private String sex;private int age;public Peple() {}public Peple(String name, String sex, int age) {this.name = name;this.sex = sex;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

我们可以发现此时的Chinese类和Russian类清爽多了,咱们也可以通过set和get方法去写入和读取它

2.2 便于功能的扩展

例如你想对某些类加上一个功能,没学继承之前你可能得这么干

Chinese类

public class Chinese {private String name;private String sex;private int age;//你想要增加weight体重这个属性,你得在Chinese里面增加weight这个属性private int weight;public Chinese() {}public Chinese(String name, String sex, int age, int weight) {this.name = name;this.sex = sex;this.age = age;this.weight = weight;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
//你得增加Chinese类中增加和修改体重的方法public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}
}

Russian类

public class Russian{private String name;private String sex;private int age;//你想要增加weight体重这个属性,你得在Russsian里面增加weight这个属性private int weight;public Russian() {}public Russian(String name, String sex, int age, int weight) {this.name = name;this.sex = sex;this.age = age;this.weight = weight;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//你得增加Russian类中增加和修改体重的方法public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}
}

你会发现当需要增加一个属性时,你得将每个需要加上的类中加上这个属性以及它的set/get方法,非常的麻烦,当我们使用继承后,改进后的代码如下所示

Chinese类

public class Chinese extends Peple{}

Russian类

public class Russian extends Peple{}

People类

public class Peple {private String name;private String sex;private int age;//你想要增加weight体重这个属性,只需要在Chinese类和Russian类的父类去增加属性即可private int weight;public Peple() {}public Peple(String name, String sex, int age,int weight) {this.name = name;this.sex = sex;this.age = age;this.weight=weight;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//你只需要在People里面写一次get/Set方法就行,这样Chinese类和Russian类都可以调用public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}
}

这样去增加和修改共有的属性是很方便的

2.3 为多态性的使用,提供了前提

3 如何使用继承

3.1 判断两个类之间是否存在继承关系的方法

a.判断两个类是否存在逻辑层面上面的父子关系

例如Dog类和People类,显然两者之间不存在逻辑层面的上的父子关系,人不可能是狗的亲生父亲,狗也不可能是人的亲生父亲。

b.公式法: A类 is B类或者B类 is A类是否成立,其中后者为父类,前者为子类

例如Dog类和People类,既不满足Dog is People,也不满足People is Dog 而Animal类和Dog类,满足Dog is Animal,因此Animal类和Dog类存在继承关系,其中Animal是父类,Dog是子类

3.2 语法

class A extends B{//其中A类为子类,派生类//B类为父类,超类,基类
}

3.3 规则

3.3.1 子类继承父类,调用构造方法时,一定会需要先调上父类的其中的任意一个构造方法,再调用自己的构造方法,若子类构造方法里面没有调用父类的,那么就会报错。注意:子类无参会默认调用父类无参构造的(默认会使用super()

解析java中的继承相关推荐

  1. java 获取spring对象数组_解析Java中如何获取Spring中配置的bean

    解析Java中如何获取Spring中配置的bean Java中如何获取Spring中配置的bean?下面是由百分网小编为大家整理的解析Java中如何获取Spring中配置的bean,喜欢的可以收藏一下 ...

  2. java method field_java_解析Java中的Field类和Method类,Field类 Field类中定义了一些方 - phpStudy...

    解析Java中的Field类和Method类 Field类Field类中定义了一些方法,可以用来查询字段的类型以及设置或读取字段的值.将这些方法与继承而来的member方法结合在一起.就可以使我们能够 ...

  3. 解析java中的方法重写

    解析java中的方法重写 1 含义 子类继承父类后,可以在子类中书写一个与父类同名同参的方法,从而实现对父类中同名同参数的方法的覆盖,我们把这一过程叫做方法的重写(override) 2 为什么要使用 ...

  4. 解析java中方法的重载和重写之间的区别与联系

    解析java中方法的重载和重写之间的区别与联系 1 不同点 1.1 方法重写是在不同的类中(父子类),方法重载是在同一类中 1.2 方法重载最初的目的是构造方法的多样化,方法重写的目的是让重写的方法满 ...

  5. 解析java中的abstract关键字

    解析java中的abstract关键字 1 含义 abstract:抽象的;是java中用来修饰类和方法一个关键字 2 为什么要用 2.1 当我们不想类能够实例化时(类实例化没有意义,例如Animal ...

  6. java 的继承_关于java中的继承

    我们都知道Java中的继承是复用代码.扩展子类的一种方式,继承使得Java中重复的代码能够被提取出来供子类共用,对于Java程序的性能以及修改和扩展有很大的意义,所以这是一个非常重要的知识点. 那么对 ...

  7. java 字符串是对象吗_解析Java中的String对象的数据类型

    解析Java中的String对象的数据类型 2007-06-06 eNet&Ciweek 1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所 ...

  8. java中抽象类继承抽象类_用Java中的抽象类扩展抽象类

    java中抽象类继承抽象类 示例问题 当我创建Java :: Geci抽象类AbstractFieldsGenerator和AbstractFilteredFieldsGenerator我遇到了一个不 ...

  9. java中抽象类继承抽象类_Java中的抽象类用示例解释

    java中抽象类继承抽象类 Abstract classes are classes declared with abstract. They can be subclassed or extende ...

最新文章

  1. Web.config中设置启用webservice远程调试访问 参数看不到
  2. 关于File.separator 文件路径:wind与linux下路径问题 .
  3. 颜宁教授当年若当选科学院院士,她还会出走清华吗?
  4. 搭建基于asp.net的wcf服务,ios客户端调用的实现记录
  5. 如何实现一个java窗口_如何实现多个弹出窗口?
  6. JAVA15.JDK15.7 HiddenClass
  7. java用十字链表实现无向图_实验四:图的实现与应用
  8. java容器详解_详解Java 容器(第①篇)——概览
  9. 从一个真实案例看性能差异问题处理方法论
  10. winform界面嵌入dwg图纸_完美解决窗体中预览DWG图形(C#版)
  11. java写入excel乱码_Java导出Excel解决乱码及导出文件打开不可读需修复的问题
  12. Java工具类之Base64Utils实现base64码转换为文件流-yellowcong
  13. 多分类任务中每个类Acc、Specificity、Sensitivity、Precision的计算
  14. Fleck webSocket
  15. python 读取zip包中的数据
  16. 艾永亮:时代的较量,谁在定义四个轮子的未来?
  17. 带按扭的轮换横幅广告
  18. ce修改器我的世界服务器,如何用ce修改我的世界饥饿度 | 手游网游页游攻略大全...
  19. 青藤云——安全服务工程师面经(北京升鑫网络科技有限公司)
  20. Python爬取喜马拉雅有声小说【转载】

热门文章

  1. java字符串转时间_java字符串和时间转换
  2. android 字符串时间,Android:将字符串转换为时间
  3. Excel表格数据转为json格式数据
  4. Markdown(更改字体、颜色、大小,设置文字背景色,调整图片大小设置居中)
  5. datastage mysql wire_DataStage 九、数据交换到MySQL以及乱码问题
  6. 有适合苹果13的防水蓝牙耳机吗?好用的防水蓝牙耳机推荐
  7. python模拟一个简单的取款机_Python模拟自动存取款机的查询、存取款、修改密码等操作...
  8. Python,超长文件名的解决方案
  9. python-37-python微服务框架Nameko
  10. 优雅编程之这样使用泛型,你就“正常”了(三十三)