java基础·小白入门(三)

目录

  • 类的继承
    • 基本概念
    • 方法覆盖
    • Object类
  • 抽象类
  • 接口
  • 枚举和包
    • 枚举

类的继承

基本概念

  1. 继承是一种由已有的类创建新类的机制。
  2. 在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类)。
  3. 子类继承父类的全部属性和行为,并可以根据需要增加自己新的属性和行为。
  4. Java不支持多继承(子类只能有一个父类)。
  5. 构造方法的继承:每个子类构造方法的第一条语句,都是隐含地调用super(),即父类无参构造方法。若要调用父类带参构造方法,可显式调用super(参数); 该句必须放第一行。
  6. 在子类中访问父类的成员:访问父类变量:super.变量名;访问父类方法:super.方法名

方法覆盖

  1. 覆盖与重载相似,均是Java“多态性”的体现。
  2. 覆盖是指在子类中,定义名称、参数个数与类型、返回类型均与父类完全相同的方法,用来重写父类里同名方法的功能。
  3. 覆盖发生在子类与父类之间(方法头完全相同)。而重载是指在同一个类里定义名称相同,参数不同的方法。
  4. 在子类中覆盖方法时,可扩大父类中的方法访问权限,但不能缩小其权限
  5. final成员与final类:final关键字可用于定义常量。final关键字修饰方法时,父类的方法不会被子类覆盖。final关键字修饰类时,final类无法再派生其他子类,通常称为“最终类”。
  6. 用父类的引用变量访问子类成员:只限于“覆盖”的情况发生,访问到的是子类方法。如果用父类的引用变量访问子类成员的新方法(该方法父类没有),则会出现编译错误。
// 格式:父类 对象名 = new 子类(); 对象名.子类方法;// 方法举例
class Parent {void display() {System.out.println("父类方法");}
}class Child extends Parent {@Overridevoid display() {  // 方法覆盖System.out.println("子类方法");}void specificMethod() {System.out.println("子类特殊方法");}
}public class Main {public static void main(String[] args) {Parent obj = new Child();  // // 访问的是子类的覆盖方法obj.display(); // 输出:子类方法// 不能访问子类特有的方法// obj.specificMethod(); // 报错}
}

Object类

  1. Object类是万类之父,所有的类均直接或间接继承于它。
  2. 如果一个类没有从别的类继承而来,即:无extends关键字,则该类默认为java.lang.Object类的子类
  3. 举例:Object类中的equals 方法。equals 方法在 Object 类中定义,默认实现是比较对象的内存地址(即是否是同一个对象)这一点和==类似,== 运算符比较的是两个对象的内存地址,即它们是否引用同一个对象。。但是许多类(如 StringIntegerList 等)会覆盖 equals 方法,以便根据对象的内容进行比较。例如,String 类中的 equals 方法被覆盖为按内容比较两个字符串是否相等。
  4. toString()方法的使用。toString()方法的功能是将对象的内容转换成字符串,并返回该字符串。若a是类A的对象,当对象a作为println()的参数时,Java会先用对象a来调用toString()方法,再把结果作为println()的参数输出。
System.out.println(a);
// 相当于:
System.out.println(a.toString());//将a转换成字符串,再由println()输出
// 如果没有重写toString方法,将使用 `Object` 类中的默认实现。结果类似:A@6b97fd// 覆盖Object类的toString()方法举例
class A { private  int  num;public A(int a){num=a;}public  String toString() {         //覆盖toString()方法String str=" toString() called,num="+num;return  str;}
}
public class Example {public static void main(String  args[]) {A a = new A(2); 	System.out.println(a.toString());  // 结果:toString() called,num=2}
}
  1. getClass()方法的使用。如果想知道某个对象obj是属于哪个类时,可用obj.getClass()来查询。例:Class ca=a.getClass();这里用变量a调用getClass()方法。
  2. 对象运算符instanceof:可利用对象运算符instanceof来测试一个指定对象是否是指定类或它的子类的实例,若是,则返回true,否则返回false。

抽象类

  1. 创建抽象类的目的:为它派生出的一整组类做一个顶层设计。其作用类似“模板”,目的是根据它的格式来创建子类。
  2. 抽象类无法实例化,即不能用new运算符来创建实例对象。它只能被继承。
  3. 在类中没有方法体的方法,就是抽象方法。抽象方法必须加关键字abstract
  4. 如果一个类中至少含有一个抽象方法,则为抽象类。抽象类必须在class前加上abstract关键字修饰。
  5. 抽象类的子类必须实现父类中的所有抽象方法,否则它也是抽象类。
  6. 可以将一个没有任何抽象方法的类声明为abstract,避免由这个类生成任何对象。
// 定义一个抽象类 Animal
abstract class Animal {// 抽象方法abstract void makeSound();
}
// Dog 类继承自 Animal
class Dog extends Animal {void makeSound() {System.out.println("汪汪");}
}
// Cat 类继承自 Animal
class Cat extends Animal {void makeSound() {System.out.println("喵喵");}
}public class Main {public static void main(String[] args) {var myDog = new Dog();var myCat = new Cat();myDog.makeSound();myCat.makeSound();}
}

接口

  1. 接口中所有的方法都默认为public abstract
  2. 接口中可以有数据成员,这些数据成员默认都是public static final,必须赋初值。所以接口中定义的变量都是常量,可以实现不同类之间常量共享。
  3. 接口的修饰符可以是publicabstract,其中abstract在缺省时也有效。为了在不同包之间互访接口,故接口常定义为public。
  4. 和public类一样,public接口也必须定义在与接口同名的文件中
  5. 接口也具有继承性,一个接口可以继承自另一个接口。使用extends关键字定义一个接口是某个已存在的父接口的子接口,它将继承父接口的所有属性和方法。
  6. 一个类可以通过关键字implements实现接口。如果一个类既要继承父类,又要实现接口,则需注意先后顺序:extends必须放在implements前面。
  7. Java中不允许类的多继承,但允许接口的多继承
  8. 一个类只能有一个直接父类,但是它可以同时实现若干个接口。一个类实现多个接口时,在implements子句中用逗号分隔各个接口名。
interface Math
{double PI=3.1415926;	
}
class Arithmetic implements Math
{double roundArea(double radius){return PI*radius*radius;		}
}
class Student
{public static void main(String[] args){Arithmetic a=new Arithmetic();System.out.println(a.roundArea(3));System.out.println(Math.PI);  // 结果为:3.1415926		System.out.println(Arithmetic.PI);  // 结果为:3.1415926System.out.println(a.PI);  // 结果为:3.1415926}
}// 接口的继承
interface Sittable
{void sit();
}
interface Lie
{void sleep();
}
interface Chair extends Sittable  // 单继承
{
}
interface Sofa extends Sittable, Lie  // 多继承
{
}
  1. 接口中的默认方法用default修饰符来定义,默认方法可以被子接口或被该接口的实现类所继承。子接口或实现类中若定义名称相同的默认方法,则父接口中的默认方法被隐藏。默认方法default有利于接口进化,和避免代码冗余。
  2. 接口中可以定义静态方法使用static关键字,默认的访问修饰符是public。该静态方法不能被子接口继承,也不能被实现类继承。接口的静态方法使用“接口名.方法名()”的形式访问。
  3. 可以在接口中定义私有方法。私有方法通常实现某种行为,这些行为可以被默认方法调用。

冲突问题

  1. 如果子接口中定义了与父接口同名的常量或同名的方法,则父接口中的常量被隐藏,方法被覆盖。
  2. 对于常量,如果多个父接口中有同名的常量,则子接口不能继承,但子接口中可以定义一个同名的常量。
  3. 对于多个父接口中存在同名的方法时,可以用委托方式解决:接口名.super.方法名();

枚举和包

枚举

  1. 枚举类型是一种特殊的引用类型,它的声明和使用与类和接口类似。声明使用enum关键字。
  2. 枚举成员默认被final public static修饰。
  3. 枚举类型都隐含地继承了java.lang.Enum抽象类,Enum类又是Object类的子类,同时实现了Comparable<T>接口。
  4. 在枚举类型的声明中,除了枚举常量外还可以声明构造方法,成员变量和其他方法。
public enum Direction{EAST, SOUTH, WEST, NORTH;
}

  1. 为了便于管理大型软件系统中数目众多的类,解决类命名冲突的问题,Java引入了包(package)。
  2. 在程序中可以创建自己的包。 格式:package 包名;
  3. package语句必须是文件中的第一条语句。也就是说,在package语句之前,除了空白和注释之外不能有任何语句。
  4. 一个源程序文件通常称为一个编译单元(compile unit)。每个编译单元可以包含一个package语句、多个import语句以及类、接口和枚举定义
  5. 一个编译单元中最多只能定义一个public类(或接口、枚举等),并且文件名与该public类名或接口名或枚举名相同。
  6. 如何取包名:建议将域名反转过来,中间用点号分隔作为包的名称,因为域名是全球唯一的,以这种方式定义的包名也是全球唯一的。假设一个域名为xy.boda.com,那么创建的包名可以为com.boda.xy,创建的类都存放在这个包下,这些类就不会与任何人的类冲突。

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

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

相关文章

C++语法17 利用for循环进行求和与求积

语法阶段已经更新到第17章了&#xff0c;前面的知识你都学会了吗&#xff1f;如果还没有学习前面的知识&#xff0c;请点击语法专栏进行[http://t.csdnimg.cn/7EcJm]学习哦&#xff01; 目录 循环求和 整数求和 解析 参考代码 分数求和 解析 参考代码 偶数求和 解析 参…

opencv学习笔记(1)

图像&视频的加载与展示 如何通过OpenCV创建显示窗口 namedWindow():创建一个窗口&#xff0c;并给窗口起一个名字&#xff0c;当起好名字后&#xff0c;可以选择显示哪个窗口 imshow()&#xff1a;显示窗口 &#xff0c;第一个参数是窗口的名字&#xff0c;如果没有会自动…

代码随想录训练营第十四天 226翻转二叉树 101对称二叉树 104二叉树的最大深度 111二叉树的最小深度

第一题&#xff1a; 原题链接&#xff1a;226. 翻转二叉树 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 递归法&#xff1a;使用中序遍历的操作&#xff0c;中左右&#xff0c;在遍历到中间节点的时候对它左右节点进行交换。 代码如下&#xff1a; /*** Def…

BC-Linux 8.6最小化安装的服务器启用GNOME图形化界面

本文记录了BC-Linux 8.6最小化安装的服务器如何启用GNOME图形化界面的过程。 一、服务器环境 1、系统版本 [rootlocalhost ~]# cat /etc/os-release NAME"BigCloud Enterprise Linux" VERSION"8.6 (Core)" ID"bclinux" ID_LIKE"rhel fe…

在VScode中创建PHP环境

一、下载PHP Server 和 PHP Debug这两个扩展 二、下载完成之后&#xff0c;在VScode中&#xff0c;打开我们写代码的文件 这里是我事先创建好的一些文件&#xff0c;本次环境搭建只需要创建一个.php后缀的文件即可。 先选中.php文件&#xff0c;再点击文件。 点击首选项&#x…

AI之Lambda index

简介 Lambda index 是一个用于衡量语言模型性能的指标,它主要评估模型在生成文本时的语言连贯性和逻辑性。它是由 OpenAI 在发布 GPT-3 模型时提出的。 具体来说,lambda index 反映了模型生成的文本中单词与上下文的关联程度。它的计算方式如下: 1、给定一个文本序列 X (x1…

使用npm发布自己的插件包

文章目录 1. 准备工作1.1 拥有一个npm账号1.2 准备你的插件代码1.3 编写package.json文件 2. 本地测试3. 发布到npm3.1 登录npm3.2 发布插件3.3 更新插件 4. 注意事项 在JavaScript和Node.js的生态系统中&#xff0c;npm&#xff08;Node Package Manager&#xff09;是一个非常…

游戏中的寻路算法研究

1)Unity NavMesh研究 思考&#xff1a;毫无疑问&#xff0c;unity中自带的navmesh寻路是比较健全的&#xff0c;无奈在服务器中无法使用&#xff0c;这样子我们没办法做怪的导航&#xff0c;但是可以先体验下都有哪些api&#xff0c;并且可以可视化的看效果。 1)打开导航网格…

【课程系列05】某心科技AI大模型微调实战营-应用篇

网盘链接 链接: https://pan.baidu.com/s/1oARULXsXn8frkqq4ZKHBLA --来自百度网盘超级会员v6的分享 课程收获 课程内容涉及大模型的介绍、Transformer、Encoder、高级微调技术、Alpaca、AdaLoRA、QLoRA、Prefix Tuning和Quantization等主题 课程截图

龙芯LS2K0300久久派上手体验

介绍 芯片 龙芯2K0300芯片是一款基于LA264处理器核的多功能SoC芯片&#xff0c;可广泛适用于工业控制、通信设备、信息家电和物联网等领域&#xff1b;该芯片采用高集成度设计&#xff0c;可提供丰富的功能接口&#xff0c;满足多场景应用需求&#xff0c;同时支持低功耗技术…

VMware 虚拟机共享宿主机文件夹

一、背景 在虚拟机中&#xff0c;需要写文件到宿主机的文件系统中 宿主机的文件共享给虚拟机使用 这些场景就涉及到VM的虚拟机怎么访问宿主机的磁盘文件夹 二、软件背景 宿主机&#xff1a;window机器&#xff0c;本文是win7 虚拟软件&#xff1a;VMware12.5.6&#xff0…

小山菌_代码随想录算法训练营第二十七天| 93.复原IP地址 、

93.复原IP地址 文档讲解&#xff1a;代码随想录.复原IP地址 视频讲解&#xff1a;回溯算法如何分割字符串并判断是合法IP&#xff1f;| LeetCode&#xff1a;93.复原IP地址 状态&#xff1a;已完成 代码实现 class Solution { private:vector<string> result; // 记录结…

基于自编码器的滚动轴承异常检测方法(NASA-IMS数据,Python)

代码较为简单。 import numpy as np import pandas as pd from tensorflow import keras from tensorflow.keras import layers from matplotlib import pyplot as plt df_stats_Ch1_test2 pd.read_csv("estadisticos_test2_ch1.csv" , sep ,) X_Ch1 df_stats_Ch…

移植案例与原理 - HDF驱动框架-驱动配置(2)

1.2.7 节点复制 节点复制可以实现在节点定义时从另一个节点先复制内容&#xff0c;用于定义内容相似的节点。语法如下&#xff0c;表示在定义"node"节点时将另一个节点"source_node"的属性复制过来。 node : source_node示例如下&#xff0c;编译后bar节点…

5分钟了解单元测试

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、什么是单元测试&#xff1f; 单元测试是指&#xff0c;对软件中的最小可测试单元在与程序其…

​海康威视 isecure center 综合安防管理平台任意文件上传漏洞

文章目录 前言声明一、漏洞描述二、影响版本三、漏洞复现四、修复方案 前言 海康威视是以视频为核心的智能物联网解决方案和大数据服务提供商,业务聚焦于综合安防、大数据服务和智慧业务。 海康威视其产品包括摄像机、多屏控制器、交通产品、传输产品、存储产品、门禁产品、消…

项目五 OpenStack镜像管理与制作

任务一 理解OpenStack镜像服务 1.1 •什么是镜像 • 镜像通常 是指一系列文件或一个磁盘驱动器的精确副本 。 • 虚拟机 所使用的虚拟磁盘&#xff0c; 实际上是 一种特殊格式的镜像文件 。 • 云 环境下尤其需要 镜像。 • 镜像 就是一个模板&#xff0c;类似于 VMware 的虚拟…

DDoS攻击增速惊人,谈谈防御DDoS攻击的几大有效方法

过去的十年里&#xff0c;DDoS攻击是计算机科学领域中最“头疼”的问题之一。Gcore发现&#xff0c;DDoS攻击增速惊人&#xff0c;2021年DDoS攻击峰值流量为300Gbps&#xff0c;2022年增至650 Gbps&#xff0c;2023 年Q3-Q4季度增至1600 Gbps (1.6 Tbps)。企业如果没有采取足够…

react钩子函数用法(useCallback、useMemo)

useMemo import { useMemo } from react; function MyComponent({ a, b }) { const memoizedValue useMemo(() > { // 进行一些昂贵的计算 return a b; }, [a, b]); // 当 a 或 b 发生变化时&#xff0c;memoizedValue 将被重新计算 return <div>{memoizedVa…

产品Web3D交互展示有什么优势?如何快速制作?

智能互联网时代&#xff0c;传统的图片、文字、视频等产品展示方式&#xff0c;因为缺少互动性&#xff0c;很难引起用户的兴趣&#xff0c;已经逐渐失去了宣传优势。 Web3D交互展示技术的出现&#xff0c;让众多品牌和企业找到了新的方向&#xff0c;线上产品展示不在枯燥无趣…