首页 > 编程语言 >Java中对继承的学习

Java中对继承的学习

时间:2024-08-22 18:27:07浏览次数:12  
标签:Java 继承 子类 代码 学习 父类 public

继承


目录

继承的概念

继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

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

class 父类 {
}

class 子类 extends 父类 {
}

public class Animal { 
    private String name;   
    private int id; 
    public Animal(String myName, int myid) { 
        //初始化属性值
    } 
    public void eat() {  //吃东西方法的具体实现  } 
    public void sleep() { //睡觉方法的具体实现  } 
} 
 
public class Penguin  extends  Animal{ 
}

为什么需要继承

代码存在重复,导致代码量大且臃肿,而且维护性不高(主要表现是后期需要修改的时候,需要修改很多的代码,容易出错)。要从根本上解决这两段代码的问题,就需要继承。

继承的特性

  • 子类拥有父类非 private 的属性、方法。
  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
  • 子类可以用自己的方式实现父类的方法。
  • Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 B 类继承 A 类,C 类继承 B 类,所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。
  • 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。

继承的优点和缺点

优点

  1. 代码复用
    继承允许子类复用父类的代码,这避免了在多个类中编写重复代码的需要。如果多个类共享某些共同的行为或属性,可以通过将它们放在一个公共的父类中来实现。

  2. 扩展性
    子类可以在继承父类的基础上添加新的属性和方法,或者覆盖(Override)父类中的方法以实现不同的行为。这使得子类能够根据需要定制和扩展功能。

  3. 多态性
    继承是实现多态性的基础之一。多态性允许我们以统一的接口使用不同的对象,这些对象可以是同一类型的不同子类实例。

  4. 维护性
    当需要修改某个类的行为时,如果该类被其他多个类继承,则只需在父类中修改即可,而无需在每个子类中分别修改。这降低了维护成本,提高了代码的可维护性。

缺点

  1. 紧耦合
    继承可能导致类之间的紧耦合。如果子类过度依赖父类的实现细节,那么当父类发生变化时,子类可能会受到影响,这增加了代码的脆弱性。

  2. 层次结构僵化
    继承结构一旦确定,就很难在不破坏现有代码的情况下进行修改。例如,如果需要在两个不相关的类之间共享某些功能,但这两个类已经通过继承与其他类建立了关系,那么添加新的共享功能可能会变得复杂。

  3. 过度继承
    过度使用继承(如创建过深的继承层次结构)可能会导致代码难以理解和维护。此外,这也可能导致代码复用过度,因为子类可能会继承一些不需要的属性和方法。

  4. 限制了灵活性
    在某些情况下,使用组合(Composition)而不是继承可能更加灵活。组合允许对象在运行时动态地获得其他对象的行为和属性,而继承则是一种静态的、编译时的关系。

  5. 初始化顺序问题
    在复杂的继承结构中,子类对象的初始化可能依赖于父类对象的完全初始化。如果子类在父类完全初始化之前就尝试访问父类的某些资源或方法,可能会导致错误。

标签:Java,继承,子类,代码,学习,父类,public
From: https://www.cnblogs.com/BingBing-8888/p/18374484

相关文章

  • 蓝队新手应该学习的 4 个 SOC 工具(如何掌握这些基本的 SOC 工具及其相关技能。)
    安全运营中心(SOC)分析师依靠各种工具来帮助他们监视他们的域。然而,仅仅依靠工具来完成工作,而未能理解其背后的基本流程和方法,对于分析师来说可能是一个代价高昂的错误。我们发现,近三分之一(29.5%)的专业人士认为事件处理流程和方法是SOC分析师需要掌握的最重要的知识领域:我从......
  • Java并发编程(八)
    1、volatile有什么用?能否用一句话说明下volatile的应用场景volatile保证内存可见性和禁止指令重排。volatile用于多线程环境下的单次操作(单次读或者单次写)。2、为什么代码会重排序在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是不能随意重排......
  • Java 字符串转换成罗马数字
    键盘录入一个字符串要求1:长度为小于等于9要求2:只能是数字将内容变成罗马数字下面是阿拉伯数字跟罗马数字的对比关系Ⅰ-1,Ⅱ-2,Ⅲ-3,Ⅳ-4,Ⅴ-5,Ⅵ-6,Ⅶ-7,Ⅷ-8,Ⅸ-9注意点:罗马数字里面是没有0的如果键盘录入的数字包含0,可以变成""(长度为0的字符串)packagetest;......
  • Java的循环结构
     一、什么是循环语句在Java中,循环是一种控制结构,允许程序重复执行一段代码块,直到满足特定的条件为止。循环结构在编程中非常重要,因为它可以避免重复编写相同的代码,提高代码的效率和可读性。一、循环条件这是一个判断表达式,用于确定是否继续执行循环。只要循环条件为真,循......
  • 什么是JAVA
    Java发展史机器语言:电子机器能够直接识别的语言,无需经过翻译,计算机内部就有相应的电路来完成它;从使用的角度来看,机器语言是最低级的语言。高级语言:更容易被人们所理解的高级程序语言,符合人类思维模式的程序设计语言,如:C、Java,JavaScript、Python、Go等。汇编语言:面向机器......
  • Java基础--static关键字
    引言        在Java编程中,static关键字是一个非常重要的概念。它可以用于变量、方法、代码块。提供了在内存管理和代码结构上的独特优势,理解并正确使用static关键字是掌握Java编程的重要一步。static关键字是什么?    static关键字是Java中的一个修饰符,用于......
  • jenkins 自动安装 和 手动安装java 或者一些其他环境配置的区别
    由于之前的jenkins存在安全漏洞,升级了jenkins,相应的jenkinsmaster服务器上的javajdk也一起升级为openjdk21.升级后发现:1.新的jenkins的slavenode启动的jar包下载后,在原来的slavenode服务器上面无法正常被执行了。这时我才知道原来升级了jenkins,对应的slavenode启动的jar......
  • Java中什么是反射
    反射文章目录反射反射概述反射是什么反射的作用反射的使用获取Class生成实例对象访问属性调用方法反射的应用反射封装JDBC框架传统写法:封装AddOne方法封装find方法封装updateById方法封装deleteById方法Guava自定义注解反射概述反射是什么反射(Reflection)......
  • Java之日期
    目录日期java.time的API(目前多用time)一、LocalDate1.基本用法2.日期之间的转化3.LocalDateTime计算4.格式化日期二、Instant1.基本应用2.常见方法3.时间计算4.时间转化三、DateTimeFormatter时间格式化1.基本用法2.各类时间格式化四、ZonedDateTime1.基本用法2.Zo......
  • 03.C语言学习【零基础版】@CHX------算术操作符
    一.+and-+:加法-:减法代码:#include<stdio.h>intmain(){ inta=5+7; intb=20-44; printf("%d%d\n",a,b); return0;}运行结果:二.* *:乘法代码:#include<stdio.h>intmain(){ inta=5+7; intb=20-18; printf("%d\n"......