【Java不看后悔系列】|面向对象编程|[继承、封装、多态全覆盖]

🌈个人主页: Aileen_0v0
🔥系列专栏:Java学习系列专栏
💫个人格言:"没有罗马,那就自己创造罗马~"

1.Judging right from wrong

(inheritance)

1.A child class inherits everything from its parent class.

2.A child class cannot inherit the constructors from its parent class .

子类继承的内容:

字段(成员变量):

子类会继承父类的字段,包括实例变量和静态变量。子类可以直接访问继承而来的字段。

方法:

子类会继承父类的方法,包括实例方法和静态方法。子类可以直接调用继承而来的方法。

子类可以重写(override)父类的方法,以提供特定于子类的实现。

构造方法:

如果子类没有定义构造方法,它会默认调用父类无参构造方法(如果父类有的话)。

如果子类定义了构造方法,可以使用 super 关键字调用父类的构造方法。

接口的实现:

如果父类实现了某个接口,子类也会继承该接口的实现,除非子类明确地重新实现了该接口。

子类不继承的内容:

私有成员

子类不会继承父类中的私有成员(私有字段、私有方法)

构造方法:

子类继承父类的构造方法但是,子类可以通过使用 super 调用父类的构造方法来初始化继承的部分。

父类的静态成员:

子类不会继承父类的静态成员静态成员与类关联的,而不是与对象关联的

父类的构造方法私有属性:

如果父类的构造方法是私有的,子类不能直接调用父类的构造方法。这通常会限制子类对父类构造方法的继承。

在Java中,子类会继承其父类的一些特性,但并非所有内容都会被继承。---> F,F


3.The superclass’s constructor must be explicitly invoked in the subclass’s constructor.

在Java中,当你在子类中创建构造函数时,通常需要显式调用超类的构造函数使用super关键字来实现。如果在子类构造函数中没有显式调用超类构造函数,Java将隐式插入对超类默认(无参)构造函数的调用。
下面是一个示例,说明了这个概念:

class Superclass {// Default constructor---无参构造方法public Superclass() {System.out.println("Superclass default constructor");}// Parameterized constructor---含参构造方法public Superclass(int x) {System.out.println("Superclass parameterized constructor with x = " + x);}
}class Subclass extends Superclass {// Implicit call to the default constructor of the superclass// if this constructor doesn't explicitly call a superclass constructorpublic Subclass() {//这里隐含super()System.out.println("Subclass constructor");}// Explicit call to the parameterized constructor of the superclasspublic Subclass(int y) {super(y); // Call to the parameterized constructor of the superclassSystem.out.println("Subclass constructor with y = " + y);}
}public class Main {public static void main(String[] args) {Subclass obj1 = new Subclass();Subclass obj2 = new Subclass(10);}
}

子类Subclass在无参构造函数(Subclass())中隐式调用了超类Superclass的默认构造函数。在有参构造函数(Subclass(int y))中,通过使用super(y)显式调用了超类的带参数构造函数。
值得注意的是,如果超类没有默认构造函数,并且在子类构造函数中没有显式调用超类构造函数,那么将会引发编译错误。因为Java子类构造函数第一条语句

要么是使用super显式调用超类构造函数

要么是隐式调用超类的默认构造函数


2.selection

Questions  refer to the BankAccount, SavingsAccount, and CheckingAccountclasses defined below:

(Constructor,inheritance)

1. Of the methods shown, how many different nonconstructor methods can be invoked by a SavingsAccount object? ---> 找SavingAccount调用的非构造方法的个数

(A) 1   (B) 2  (C) 3   (D) 4  (E)5

因为我们之前已经学过什么是构造方法什么是继承,并且知道继承会继承父类的方法,若有遗忘点击👉🔗:http://t.csdnimg.cn/MZtBH

so 是4个--->D

调用父类构造方法的语句super()必须位于子类构造方法语句的句首。

2. Which is a correct implementation of the constructor with parameters in the SavingsAccount class?  

A:  不可以直接给父类私有变量直接赋值,对于父类的私有变量需要通过父类提供public的构造方法进行变量修改。

B:有getbalance只是返回balance的值,并不是把它的值给balance所以B不正确。

C:super();只是调用父类无参构造方法,balance = 0;

但是并未将accountBlance赋值给balance,所以错误

E: 父类不含两个参数构造方法,无法调用。

C:想要执行SavingsAccount class的含参构造方法,去修改参数的值,在子类可以 直接通过=赋值进行修改,而对于父类的私有变量需要通过父类提供public的构造方法进行变量修改。

如果父类类变量是private,要访问/修改父类私有变量,需要父类提供public的构造方法进行变量修改 --->D


📝总结:

在Java中,final 关键字有不同的用途,它可以用于变量、方法以及类。

1.Final 修饰变量:
当 final 用于修饰一个变量时,表示该变量是一个常量,其值不能被修改。这一次赋值后,就不能再次为该变量赋新值。

   final int x = 10;


2.Final 修饰方法:
当 final 用于修饰一个方法时,表示该方法不能被子类重写(覆盖)。

   public class Parent {public final void display() {System.out.println("This method cannot be overridden.");}}


3.Final 修饰类:
当 final 用于修饰一个类时,表示该类不能被继承,即不能有子类

   final class FinalClass {// Class implementation}

使用 final 的好处包括:

安全性: 当一个变量被声明为 final 时,它的值不能被改变,这样可以防止在程序的其他部分意外地改变这个值。
性能优化: Java 编译器能够进行一些优化,因为它知道 final 变量的值在运行时不会发生变化,这可以在某些情况下提高性能。
设计上: final 方法和类可以阻止子类修改其行为,这有助于确保一些设计上的意图。

需要注意的是,final 并不是总是必需的,而是根据设计需要和代码安全性来决定是否使用。在合适的情况下使用 final 可以提高代码的清晰性和可维护性。

 

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

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

相关文章

web之CSS悬停效果页面设计

参考小米商城的“手机”页面&#xff0c;做出一个“手机”的标签&#xff0c;实现当鼠标悬停在“手机”上时&#xff0c;出现手机系列菜单&#xff1b;当鼠标移走时&#xff0c;菜单页面消失的效果&#xff01; 参考图&#xff1a; 实现代码&#xff1a; <!DOCTYPE html&g…

失业无忧!掌握这四个网站,年收入10-20万!

大家好&#xff01;在职场中&#xff0c;失业可能是每个人都会面临的一种情况。当然&#xff0c;失业并不是终点&#xff0c;而是重新出发的起点。在这个充满机遇的数字时代&#xff0c;利用网络资源来提升自己是再合适不过了。今天&#xff0c;我将介绍四个非常有用的网站&…

Achronix提供由FPGA赋能的智能网卡(SmartNIC)解决方案来打破智能网络性能极限

作者&#xff1a;Achronix 随着人工智能/机器学习&#xff08;AI/ML&#xff09;和其他复杂的、以数据为中心的工作负载被广泛部署&#xff0c;市场对高性能计算的需求持续飙升&#xff0c;对高性能网络的需求也呈指数级增长。高性能计算曾经是超级计算机这样一个孤立的领域&a…

自动化测试知识总结(含资料)

一、自动化测试 自动化测试的定义&#xff1a;使用一种自动化测试工具来验证各种软件测试的需求&#xff0c;它包括测试活动的管理与实施、测试脚本的开发与执行。 自动化测试只是测试工作的一部分&#xff0c;是对手工测试的一种补充; 自动化测试绝不能代替手工测试;多数情况…

世微 APS54085 22W高辉度调光降压恒流芯片 LED驱动IC

产品描述 APS54085 是一款 PWM 工作模式,简单、内置功率 MOS 管&#xff0c;适用于 5-100V输入的高精度降压 LED 恒流驱动芯片。电流2.0A。APS54085 可实现线性调光和 PWM 调光&#xff0c;线性调光有效电压范围 0.52-2.55V.PWM 调光频率范围 100HZ-30KHZ。APS54085 工作频率可…

文件包含的提升刷题

上一篇文章&#xff1a;一篇文章带你入门文件包含-CSDN博客 已经开始入门了文件包含&#xff0c;那现在开始拔高提升刷题&#xff01; 1. 拿到题目后啥也没有&#xff0c;所以也不知道要读取啥文件&#xff0c;那就查看源代码。 直接看if的条件就可以知道一定要设置cookie&a…

花生壳使用记录

添加内网穿透 花生壳升级后&#xff0c;配置内网穿透时提示只能使用https。但其实赠送的两个域名有一个是可以免费配置https的&#xff0c;可以挨个试试 IP指向异常 配置完成内网穿穿透后&#xff0c;提示链接失败&#xff0c;如下 出现上面的原因&#xff0c;是因为我在ap…

如何通过ssh管道传输文件到ubuntu

如何在window系统中&#xff0c;通过ssh将指定的文件传输到ubuntu中呢&#xff1f; 比较常用的有以下种方式&#xff1a; 共享文件夹借助工具&#xff0c; FileZillaMobaxtermWinSCPXshell XFTP samba互传PuTTY pscp 今天主要分享一个使用python脚本搭建的一个&#xff0c;…

【Java】【Hutool】从零开始实现发送邮件功能

采用Hutool工具实现发送邮件&#xff0c;可以访问Hutool官网 引言&#xff1a;从零开始&#xff0c;实现一个基本功能&#xff0c;邮件发送 第一步&#xff1a;打开idea&#xff0c;新建maven工程&#xff0c;引入依赖&#xff0c;如下&#xff1a; <dependencies><…

基于JAVA的农村物流配送系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2.1 快递信息管理&#xff1a;2.2.2 位置信息管理&#xff1a;2.2.3 配送人员分配&#xff1a;2.2.4 路线规划&#xff1a;2.2.5 个人中心&#xff1a;2.2.6 退换快递处理&#xff1a;…

飞天使-docker知识点10-docker总结

文章目录 docker 知识点汇总docker chatgpt解释学习路线cmd和 ENTRYPOINT 的区别harbor安装漏洞扫描 docker 知识点汇总 docker 基础用法 docker 镜像基础用法 docker 容器网络 docker 存储卷 dockerfile docker仓库 harbor docker-compose docker-swarmdocker chatgpt解释学…

DSP280049C初学(5)-基于IIC的FM24CL16B存储器的使用

DSP280049C初学&#xff08;5&#xff09;-基于IIC的FM24CL16B存储器的使用 实现目的&#xff1a; DSP280049C芯片能够通过IIC通讯实现写入和读取FM24CL16B存储器&#xff0c;其中本文参考了文章TMS320F280049 I2C IIC 相对于库函数操作CAT24C02 中文。 1.userIIC.h头文件配置…