Java语言程序设计——篇七(2)

在这里插入图片描述

     🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿

封装性与多态

  • 封装性与访问修饰符
    • 类的访问权限
    • 类成员的访问权限
  • 🌠防止类扩展和方法覆盖
      • 实战演练
  • 抽象类
      • 实战演练
  • 对象转换
      • 实战演练
  • instanceof运算符
  • 多态与动态绑定
      • 实战演练
      • 实战演练

封装性与访问修饰符

对象的封装

  • 通过包实现封装性
    包是JAVA中最大的封装单位,定义了成员的访问权限。
  • 通过类和类的成员访问权限实现
    比如:private

类的访问权限

类的访问权限通过修饰符public实现,若缺省访问修饰符的类仅能被同一个包的类使用

package com.demo;
public class Employee {public Employee(){System.out.println("创建Employee对象");}
}
package com.xxxxx;
import com.demo.Employee;
public class EmployeeTest {public static void main(String[] args){Employee emp = new Employee();}
}

不在同一个包中,需要import导入。若同一包中,则不需要

类成员的访问权限

类成员的访问权限包含成员变量和成员方法的访问权限
(1) private:私有成员,只能本类访问,最能体现封装性,实现隐藏
(2) protected:保护成员,可以被类本身访问;也可以被同一包中的类以及该类的子类访问
(3) public:公共成员,可以被任何其他类访问
(4) 缺省:包可访问的,成员被本类或同一个包中的类访问。
在这里插入图片描述

🌠防止类扩展和方法覆盖

  • 使用final修饰类,该类(public final class EmployeeTest {}
    该类为最终类,不能被继承)
    就成了最终类 (不能被继承)
  • 如果用final来修饰类的成员,则该成员为最终成员。
  • 若父类的成员不希望被子类的成员所覆盖,则可将它们声明为final。final成员可被继承,但不能被覆盖。
  • 成员变量若同时被static和final修饰,则表示常量,若没有初始化则按默认值初始化。
  • 仅用final不用static修饰则必须且只能赋值一次,不能默认。方式:定义时赋值;构造方法赋值。

实战演练

public final class Parent {}

在这里插入图片描述
在这里插入图片描述

public class Parent {public final void setXY(int x,int y){}
}
public class Child extends Parent{public void setXY(int x,int y){}		
}

出现错误在这里插入图片描述

public static final int Size = 10;	int data public void add(){Size = Size + 1;data = data + Size;}

出现错误
在这里插入图片描述

抽象类

抽象类有点类似“模板”的作用,其目的是根据它的格式来创建和修改新的类。但是并不能直接由抽象类创建对象,只能通过抽象类派生出新的子类,再由其子类来创建对象。即,抽象类就是不能用new运算符来创建实例对象的类,它可以作为父类被它的所有子类所共享。

  • 抽象类的定义格式:
abstract class 类名{声明成员变量;返回值的数据类型 方法名(参数表){……} abstract  返回值的数据类型 方法名(参数表);}

在抽象方法里,不能定义方法体。只需声明不需实现。
说明:
①抽象类的子类必须实现父类中的所有抽象方法,即抽象方法必须被子类的方法所覆盖,或将自己也声明成抽象方法。
②由于抽象类是需要被继承的,所以abstract类不能用final来修饰。也就说,一个类不能既是最终类,又是抽象类,即关键字abstract与final不能合用。
抽象类中不一定包含抽象方法,但包含抽象方法的类一定要声明为抽象类。
④抽象类可以有构造方法,且可被子类构造方法所调用,但构造方法不能被声明为抽象的。抽象类不能创建实例,一般情况,不会定义构造方法。

实战演练

【例】抽象类的应用举例,定义一个形状抽象类Shape,以该抽象类为父类派生出圆形子类Circle和矩形子类Rectangle。

abstract class Shape
{protected String name;public Shape(String xm){name=xm;System.out.print("名称:"+name);}abstract public double getArea();abstract public double getLength();
}
class Circle extends Shape
{private final double PI=3.14;private double radius;public Circle(String shapeName, double r){super(shapeName);radius=r;}public double getArea() {  return PI*radius*radius; }public double getLength(){  return 2*PI*radius;  }
}
class Rectangle extends Shape
{private double width;private double height;public Rectangle(String shapeName,double width,double height){super(shapeName);this.width=width;this.height=height;}public double getArea(){  return width*height;  }public double getLength(){  return 2*(width+height);  }
}
public class App {public static void main(String[] args){Shape rect =new Rectangle("长方形",6.5,10.3);System.out.print(";面积="+rect.getArea());System.out.println(";周长="+rect.getLength());Shape circle=new Circle("圆",10.2);System.out.print(";面积="+circle.getArea());System.out.println(";周长="+circle.getLength());}
}

运行结果:
在这里插入图片描述

对象转换

对象转换:子类对象与父类对象在一定条件下可以相互转换。
在这里插入图片描述
在这里插入图片描述

实战演练

【例】类的继承,创建Person类,再以该类为父类创建一个子类Employee。(回顾)

public class Person {public String name;public int age;public Person(){}public Person(String name, int age){this.name = name;this.age = age;}public void sayHello(){System.out.println("My name is"+name);}
}
public class Employee extends Person {public double salary;public Employee(){}public Employee(double salary){this.salary = salary;}public Employee(String name,int age, double salary){super(name,age);this.salary = salary;}public double computeSalary(int hours, double rate){double salary = hours * rate;return this.salary + salary;}
}

【例】对象转换

public class EmployeeTest {
public static void main(String[] args){Employee emp = new Employee("李菲菲",23,5000);System.out.println(emp);Person p = emp;System.out.println(p);p.sayHello();Employee yy = (Employee)p;System.out.println(yy.computeSalary(10, 50.0));}
}

instanceof运算符

对象运算符instanceof
可利用对象运算符instanceof在运行时来测试一个指定对象是否是指定类或它的子类的实例,若是则返回true,否则返回false。

class Person { }
class Man extends Person{ }
Person p1 = new Person();
Person p2 = new Man();
Man m1 = new Man();
System.out.println(p1 instanceof Man);//false
System.out.println(p2 instanceof Man);//true
System.out.println(m1 instanceof Man);//true

多态与动态绑定

  • 多态 某种抽象的动作由特定的方式实现,特定的方式取决于执行该动作的对象。
  • 可以简单理解为多态就是“相同的表达式,不同的操作”或“相同的命令,不同的操作”
    多态分为:
        ①静态多态----重载实现
        ②动态多态----覆盖实现

实战演练

多态与动态绑定----动态多态

public class Person {public String name;public void sayHello(){System.out.println("My name is"+name);}public void sayHello(String s){System.out.println("My name is"+s);}public void sayHello(String s,int ss){for(int i = 0; i < ss; i++)System.out.println("My name is"+s);}
}

实战演练

多态与动态绑定----静态多态

public class Animal{public abstract void eat(){}
}
public class Dog extends Animal{public void eat(){System.out.println(“eat bone!");}
}
public class Cat extends Animal{public void eat(){System.out.println(“eat fish!");}
}

博主用心写,读者点关注,互动传真情,知识不迷路

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

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

相关文章

lambda表达式,真题示例

Lambda表达式 它使代码更加简洁、易读&#xff0c;函数式编程增强了代码的表达力。常用于对集合的操作&#xff0c;如遍历、过滤、转换等。 Lambda表达式的形式&#xff1a; 参数&#xff0c; 箭头&#xff08;->) 以及一个表达式&#xff1a; (String first, String sec…

Android P Input设备变化监听 Storage设备变化监听

InputManager.java中实现了InputDeviceListener接口&#xff0c;只需要新建一个类 implements InputDeviceListener &#xff0c;并且将类实例化注册给InputManager.getInstance().registerInputDeviceListener即可。 StorageManager同理 StorageManager中会调用StorageEventL…

还手动抄字幕?学会这3个视频转文字方法,轻松提取视频中的字幕!

大家有尝试过考试前极限抱佛脚吗&#xff1f; 在下不才&#xff0c;曾经试过一次&#xff0c;轻松在及格线低空飘过【大家不要学不要学不要学&#xff0c;重要的事情说三遍&#xff01;&#xff01;&#xff01;】 至于我当时究竟是怎么做到的呢&#xff1f;其实这里面有点小…

网络原理_初识

目录 一、局域网LAN 二、广域网WAN 三、网络通信基础 3.1 IP地址 3.2 端口号 3.3 协议 3.4 五元组 3.5 OSI七层模型 3.6 TCP/IP五层模型 3.7 网络设备所在分层 3.8 封装和分用 总结 一、局域网LAN 局域网&#xff0c;即 Local Area Network&#xff0c;Local 即标…

“微软蓝屏”全球宕机,敲响基础软件自主可控警钟

上周五&#xff0c;“微软蓝屏”“感谢微软 喜提假期”等词条冲上热搜&#xff0c;全球百万打工人受此影响&#xff0c;共同见证这一历史性事件。据微软方面发布消息称&#xff0c;旗下Microsoft 365系列服务出现访问中断。随后在全球范围内&#xff0c;包括企业、政府、个人在…

【定积分】

框架 概念&#xff0c;性质定积分计算基本特色变限积分及其导数反常积分&#xff08;广义积分&#xff09;定积分应用面积体积 讲解 1.概念&#xff0c;性质&#xff1a; 定积分就是求出曲线的面积&#xff1b;性质中要注意几个不等式的比较 2.定积分计算&#xff1a; 基本&…

物理机 gogs+jenkins+sonarqube 实现CI/CD

一、部署gogs_0.11.91_linux_amd64.tar.gz gogs官网下载&#xff1a;https://dl.gogs.io/ yum -y install mariadb-serversystemctl start mariadbsystemctl enable mariadbuseradd gittar zxvf gogs_0.11.91_linux_amd64.tar.gzcd gogsmysql -u root -p < scripts/mysql.…

vue3前端开发-小兔鲜项目-登录和非登录状态下的模板适配

vue3前端开发-小兔鲜项目-登录和非登录状态下的模板适配&#xff01;有了上次的内容铺垫&#xff0c;我们可以根据用户的token来判定&#xff0c;到底是显示什么内容了。 1&#xff1a;我们在对应的导航组件内修改完善一下内容即可。 <script setup> import { useUserSt…

svn软件总成全内容

SVN软件总成 概述&#xff1a;本文为经验型文档 目录 D:\安装包\svn软件总成 的目录D:\安装包\svn软件总成\svn-base添加 的目录D:\安装包\svn软件总成\tools 的目录D:\安装包\svn软件总成\tools\sqlite-tools-win32-x86-3360000 的目录D:\安装包\svn软件总成\安装包-----bt lo…

C#调用OpenCvSharp实现图像的角点检测

角点检测用于获取图像特征&#xff0c;以支撑运动检测、目标识别、图像匹配等方面的应用。常用的角点检测算法包括Kitchen-Rosenfeld算法、Harris算法、KLT算法、SUSAN算法等&#xff0c;本文学习并测试Harris角点检测算法。   关于Harris算法的数学原理请见参考文献1的第18、…

C++内存管理和模板/stl初识

前言 c兼容C语言&#xff0c;但它因为有类和对象的概念&#xff0c;C语言原生的那套内存管理函数在特定场景下还是有些捉襟见肘的&#xff0c;为此c在C语言的基础上引入新的内存管理方案&#xff0c;今天我们就来简单的认识一下c的内存管理。除此之外&#xff0c;模板也是c引入…

Jetpack Compose 通过 OkHttp 发送 HTTP 请求的示例

下面是一个使用 Kotlin 和 Jetpack Compose 来演示通过 OkHttp 发送 HTTP 请求的示例。这个示例包括在 Jetpack Compose 中发送一个 GET 请求和一个 POST 请求&#xff0c;并显示结果。 添加okhttp依赖 首先&#xff0c;在你的 build.gradle.kts 文件中添加必要的依赖&#xf…

父子组件生命周期的执行顺序

在Vue中&#xff0c;父子组件的生命周期执行顺序是一个重要的概念&#xff0c;它帮助开发者理解组件之间的加载、更新和销毁过程。以下是对父子组件生命周期执行顺序的详细解释&#xff1a; 一、加载渲染过程 当Vue实例开始创建时&#xff0c;会按照以下顺序执行生命周期钩子…

PACS医学影像临床信息系统,C#影像归档和通信系统源码,PACS源码,支持图像的获取、传输、浏览、打印、测量、重建、对比、存储、处理,电子胶片影像管理等

医学影像临床信息系统具有图像采集、显示、存储、传输和管理等功能&#xff0c;支持DICOM影像设备和非DICOM影像设备&#xff0c;可以识别CT、MR、CR/DR、X光、DSA、B超、NM、SC等设备的图像类型&#xff0c;可对数字影像进行无损压缩和有损压缩处理。C/S体系结构的多媒体数据库…

STM32智能照明控制系统教程

目录 引言环境准备智能照明控制系统基础代码实现&#xff1a;实现智能照明控制系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;照明管理与优化问题解决方案与优化收尾与总结 1. 引言 智能照明控制系统通…

独立游戏《星尘异变》UE5 C++程序开发日志8——实现敏感词过滤功能(AC自动机)

在游戏中经常会有需要玩家输入一些内容的功能&#xff0c;例如聊天&#xff0c;命名等&#xff0c;这款游戏只有在存档时辉用到命名功能&#xff0c;所以这个过滤也只是一个实验性的功能&#xff0c;我们将使用AC自动机来实现&#xff0c;这是在我们把“csdn”这个词设置为屏蔽…

解决zabbix-server7 中文乱码问题

系统使用centos9 安装中文支持 yum install -y fontconfig langpacks-zh_CN.noarch 检查是否已有中文字体&#xff1a; fc-list :langzh 看到 直接使用GOOGLE的字体 ln -fs /usr/share/fonts/google-noto-cjk/NotoSansCJK-DemiLight.ttc /etc/alternatives/zabbix-web-fo…

bool数组的理解和应用[C++]

文章目录 bool数组的用法bool数组的定义声明bool数组的初始化访问和修改数组元素遍历数组 运用bool数组简单代码 在今天做题中发现了bool类不仅能用于函数类型还能用于数组类型&#xff0c;好奇查了查发现bool还有很多用处&#xff1a;基本变量&#xff0c;在枚举类型中会用到&…

【C语言】结构体详解 -《探索C语言的 “小宇宙” 》

目录 C语言结构体&#xff08;struct&#xff09;详解结构体概览表1. 结构体的基本概念1.1 结构体定义1.2 结构体变量声明 2. 结构体成员的访问2.1 使用点运算符&#xff08;.&#xff09;访问成员输出 2.2 使用箭头运算符&#xff08;->&#xff09;访问成员输出 3. 结构体…

一个C++模板工厂的编译问题的解决。针对第三方库的构造函数以及追加了的对象构造函数。牵扯到重载、特化等

一窥模板的替换和匹配方式&#xff1a;偏特化的参数比泛化版本的还要多&#xff1a;判断是不是std::pair&#xff1c;,&#xff1e;。_stdpair模板参数太多-CSDN博客 简介 在一个项目里&#xff0c;调用了第三封的库&#xff0c;这个库里面有个类用的很多&#xff0c;而且其构…