Java的继承概念

news/2024/10/23 23:08:23/文章来源:https://www.cnblogs.com/zyh-828/p/18498554

在Java中,继承是一种重要的面向对象编程概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。使用继承可以提高代码的复用性和可维护性。

  1. 继承的基本语法

    • 使用 extends 关键字来声明一个类继承自另一个类。
    class Parent {// 父类的属性和方法
    }class Child extends Parent {// 子类的属性和方法
    }
    
  2. 构造方法的调用

  • 子类的构造方法会隐式调用父类的无参构造方法。如果父类没有无参构造方法,必须显式调用父类的带参构造方法。
class Parent {public Parent(String name) {// 父类的带参构造方法}
}class Child extends Parent {public Child() {super("defaultName"); // 显式调用父类的带参构造方法}
}
  1. 方法重写(Override)
  • 子类可以重写父类的方法,但必须保持方法签名一致。
  • 使用 @Override 注解来确保方法确实被重写了。
class Parent {public void display() {System.out.println("Parent display");}
}class Child extends Parent {@Overridepublic void display() {System.out.println("Child display");}
}
  1. 方法重载(Overload)
  • 方法重载是指在一个类中定义多个同名但参数列表不同的方法。
  • 方法重载与继承无关,但要注意不要在子类中无意地重载了父类的方法。
class Parent {public void display(int a) {System.out.println("Parent display with int");}
}class Child extends Parent {public void display(String s) {System.out.println("Child display with String");}
}
  1. 访问控制
  • 继承时,子类只能访问父类的 publicprotected 成员,不能访问 private 成员。
  • 可以通过 protected 关键字来控制成员的访问范围。
class Parent {protected int age;private String name;public String getName() {return name;}
}class Child extends Parent {public void printAge() {System.out.println(age); // 可以访问 protected 成员}
}
  1. final 关键字
  • 使用 final 关键字可以防止类被继承或方法被重写。
final class FinalClass {// 该类不能被继承
}class Parent {public final void display() {// 该方法不能被重写}
}
  1. 抽象类和接口

    • 抽象类可以包含抽象方法和具体方法,子类必须实现抽象方法。
    • 接口中的方法默认是 public abstract 的,实现接口的类必须实现所有方法。
    abstract class AbstractClass {public abstract void abstractMethod();public void concreteMethod() {// 具体方法}
    }interface MyInterface {void method1();void method2();
    }class MyClass extends AbstractClass implements MyInterface {@Overridepublic void abstractMethod() {// 实现抽象方法}@Overridepublic void method1() {// 实现接口方法}@Overridepublic void method2() {// 实现接口方法}
    }
    
  2. 多态

  • 多态是指同一个方法调用在不同的对象上有不同的行为。
  • 通过父类引用调用子类对象的方法,可以实现多态。
class Parent {public void display() {System.out.println("Parent display");}
}class Child extends Parent {@Overridepublic void display() {System.out.println("Child display");}
}public class Main {public static void main(String[] args) {Parent parent = new Child(); // 父类引用指向子类对象parent.display(); // 输出 "Child display"}
}
  1. 继承的层次
    • Java 中只支持单继承,即一个类只能继承一个父类,但可以实现多个接口。
    • 过多的继承层次可能导致代码复杂性和维护难度增加。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/820907.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024秋软工实践 福气满满团队展示与选题报告

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024作业要求 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13281作业的目标 运用LMM大语言模型接口创建一款基于场景的AI对话软件,为传统软件赋予全新功能团队名称 福气满满团队成员学号-名字 052203132童…

《操作系统真象还原》内核内存分布与加载

操作系统内核加载流程图 %%{init:{theme:default, themeVariables:{fontSize:1px}}}%% graph TBA(mbr.s 0xc700开始) --> rd_disk_m_16(mbr.s <br /> rd_disk_m_16) A --> C(loader.s <br> jmp LOADER_BASE_ADDR + 0x300) --> loader_start(loader.s…

20222318 2024-2025-1 《网络与系统攻防技术》实验二实验报告

1.实验内容 (一)本周课程内容 (1)深入理解后门概念及其实际案例,明晰后门对系统安全构成的潜在威胁。 (2)普及后门技术知识,涵盖各类进程隐藏技巧,并熟悉netcat、meterpreter、veil等常见工具的应用。 (3)进一步学习了shellcode注入的逻辑原理及其在不同场景下的应用…

IDEA 类和方法的注释

IDEA 类和方法的注释 一、设置方法的注释 (1) 打开file->setting->Editor->LiveTemplates点击右上面那个+号,选择Template Group双击,然后弹出一个窗口,添加命名为KeyBoard点击OK完成,如下图1所示:图1 (2) file->setting->Editor->LiveTemplates这个…

实验2 类和对象

任务1 t.h1 #pragma once2 3 #include <string>4 5 // 类T: 声明6 class T {7 // 对象属性、方法8 public:9 T(int x = 0, int y = 0); // 普通构造函数 10 T(const T &t); // 复制构造函数 11 T(T &&t); // 移动构造函数 12 ~T();…

提权 | Windows系统

提权篇:Windows系统常见提权姿势。目录cmd提权meterpreter提权getsystemsteal_tokenmigrate令牌窃取(MS16-075)烂土豆提权步骤烂土豆提权原理sc命令提权抓本地密码提权其他工具pr工具内核提权WindowsVulScan cmd提权 前言:我们getshell一个用windows部署的网站后,通过蚁剑或…

for 循环()简单到高阶

for循环的初始意义是遍历一串具有相同特性的值 1、遍历数组,根据索引去求值点击查看代码 public class ForDemo1 {public static void main(String[] args) {int[] arr = {1,2,3,4,5,6,7};for (int i = 0; i < arr.length; i++) {System.out.println("arr["+i+&q…

08.Sleuth(Micrometer)+ZipKin分布式链路追逐

1.Sleuth进入维护模式替代方案 -> Micrometer Tracing 2.分布式链路追踪概述 2.1 出现背景 在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的服务节点调用来协调产生最后的结果,每一个前端请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环…

sream

构建 arrays.stream(数组) 根据数组构建 collection.stream 根据集合构建 stream.of 根据对象创建 生成 Instream.range(a,b) 合并 stream.concat(流1,流2)

SvnKit提交代码

官网地址:https://svnkit.com/documentation.html#high-level-api svnkit提交代码提供的API 官方api地址 官网地址:https://svnkit.com/javadoc/org/tmatesoft/svn/core/wc/SVNClientManager.html 官方案例地址 https://wiki.svnkit.com/Committing_To_A_Repository svnkit调…

基于ubuntu配置环境时遇到的问题

新手都会遇到的配置问题:问了一下,具体原因是 连不上archive.ubuntu.com 解决方案是: 查找一下IP地址,然后ping一下 在 Ubuntu 中查找地址的指令是 $ ip addr show但是我先不ping,我先用vi讲我原来的源注释掉!(PS:这里真的很小心,一直在normal和insert模式下来回切换!!…

线性 DP

最长上升子序列问题是一个经典的线性动态规划问题。 例题:B3637 最长上升子序列 分析:设原始数组为 \(a\),定义状态 \(dp_i\) 表示以 \(a_i\) 结尾的上升子序列的最大长度。注意这个状态定义中有两个重点,第一个重点是 \(dp_i\) 只维护所有原始序列中以 \(a_i\) 结尾的上升…