Java 多态、抽象类、接口、封装、包

一、Java 多态:

多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同的操作。多态性是对象多种表现形式的体现。

多态的优点:消除类型之间的耦合关系;可替换性;可扩充性;接口性;灵活性;简化性。

多态存在的三个必要条件:继承;重写、父类引用指向子类对象。

class Shape {
     void draw() {}

class Circle extends Shape {
      void draw() {
         System.out.println("Circle.draw()");
     }

class Square extends Shape {
     void draw() {
         System.out.println("Square.draw()");
     }

class Triangle extends Shape {
     void draw() {
         System.out.println("Triangle.draw()");
      }
}

多态的实现方式:

1、重写;

2、接口;

3、抽象类和抽象方法。

二、Java抽象类:

在面向对象的概念中,所有的对象都是通过类来描述的,但并不是所有的类都用来描述对象。如果一个类中没有包含足够的信息来描述一个具体的对象,那这样的类就是抽象类。

抽象类不能实例化,所以,抽象类碧玺被继承,才能被使用。在Java中抽象类表示一种继承关系,一个类只能继承一个抽象类。

在Java语言中,使用abstract class来定义抽象类:

public abstract class Employee {

private String name;

private String address;

private int number;

public Employee(String name, String address, int number) {

System.out.println("Constructing an Employee");

this.name = name;

this.address = address;

this.number = number;

}

public double computePay() {

System.out.println("Inside Employee computePay");

return 0.0;

}

public void mailCheck() {

System.out.println("Mailing a check to " + this.name + " " + this.address);

}

public String toString() {

 return name + " " + address + " " + number;

}

public String getName() {

return name;

}

public String getAddress() {

return address;

}

public void setAddress(String newAddress) {

address = newAddress;

}

public int getNumber() {

return number;

}

}

继承抽象类:

public class Salary extends Employee {

private double salary; //Annual salary

public Salary(String name, String address, int number, double salary) {

super(name, address, number);

setSalary(salary);

}

public void mailCheck() {

System.out.println("Within mailCheck of Salary class "); System.out.println("Mailing check to " + getName() + " with salary " + salary);

}

public double getSalary() {

return salary;

}

public void setSalary(double newSalary) {

if(newSalary >= 0.0) {

salary = newSalary;

}

}

public double computePay() {

System.out.println("Computing salary pay for " + getName());

return salary/52;

}

}

抽象方法:Abstract关键字用来声明抽象方法,抽象方法只包含一个方法名,没有方法体,抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。

public abstract class Employee {

private String name;

private String address;

private int number;

public abstract double computePay();

//其余代码

}

三、Java封装:

封装是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。封装可以被认为是一个保护屏障,放置该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的接口控制。实现java封装的步骤:

  1. 、修改属性的可见性来限制对属性的访问(一般限制为private)
  2. 、对各个值的属性提供对外的公共方法访问,即创建一对赋取值方法,用于对私有属性的访问。

public class EncapTest{

 private String name;

private String idNum;

private int age;

public int getAge(){

return age;

}

 public String getName(){

 return name;

}

public String getIdNum(){

return idNum;

 }

public void setAge( int newAge){

age = newAge;

}

public void setName(String newName){

name = newName;

}

public void setIdNum( String newId){

 idNum = newId;

}

}

四、Java接口:

接口(interface),在java编程语言中是一个抽闲类型,是抽象方法的集合,接口通常以interface来声明,一个类通过继承接口的方式,从而来继承接口的抽象方法。接口并不是类,类描述对象的属性和方法,接口则包含类要实现的方法。接口无法被实例化,但可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。

接口的声明:

[可见度] interface 接口名称 [extends 其他的接口名] {

// 声明变量

// 抽象方法

}

接口的语法:

...implements 接口名称[, 其他接口名称, 其他接口名称..., ...] ...

五、Java枚举:

Java枚举是一个特殊的类,一般表示一组常量。Java枚举类使用enum关键字来定义,各种常量使用逗号,来分隔。

enum定义的枚举类默认继承了java.lang.Enum类,并实现了 java.lang.Serializable 和 java.lang.Comparable 两个接口。values(), ordinal() 和 valueOf() 方法位于 java.lang.Enum 类中:values() 返回枚举类中所有的值;ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样;valueOf()方法返回指定字符串值的枚举常量。

六、Java 包:

Java包用于区别类名的命名空间。包的作用:1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用;2、如果文件夹以信仰,包采用树形目录的存储方式,同一个包中的类名是不同的,不同包中的类名是可以相同的。当同时调用不同包中相同类名的类时,加上包名加以区别,可以避免名字冲突;3、包限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

Java使用包这种机制是为了防止命名冲突,访问控制,提供搜索和定位类、接口、枚举和注释等。

包语句的语法:package pkg1[.pkg2[.pkg3…]];

在Java中,import关键字用于导入其他类或包中定义的类型,以便在当前源文件中使用这些类型,import语句的语法:

import package1[.package2…].(classname|*);

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

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

相关文章

小程序开发平台源码系统 各行各业都可使用 功能强大 附带完整的搭建教程

当前,数字化转型已经成为各行各业的重要趋势,而小程序作为数字化转型的重要工具之一,具有广泛的应用前景。因此,我们开发了这个源码系统,以帮助各行各业快速开发出符合需求的小程序。 以下是部分代码示例:…

设计模式—结构型模式之享元模式

设计模式—结构型模式之享元模式 享元模式(Flyweight Pattern),运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。对象结构型。 在享元模式中可以共…

机器学习实战 ——《跟着迪哥学Python数据分析与机器学习实战》(2)

机器学习实战 ——《跟着迪哥学Python数据分析与机器学习实战》(2) 七、贝叶斯算法7.1 新闻分类任务实战7.1.1 结巴分词7.1.2 词云表示工具包wordcloud7.1.3 TF-IDF特征 八、聚类算法K-means K-均值聚类算法评估指标优缺点 DBSCAN(Density-Ba…

ChatGPT/GPT4科研实践应用与AI绘图技术及论文高效写作

2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

VS搭建QT环境失败1

在VS中做一个简单QT控制台程序; 包含目录已经添加如下图;可以找到QCoreApplication头文件;可以找到QCoreApplication类,把鼠标放上去会有提示;但是由QCoreApplication类生成对象会出错;app这个变量提示出错; 同时显示200多个错误;这是VS2015; 看一下我的QT安装有没有缺…

C++(11):原子类型的is_lock_free/is_always_lock_free

原子类型提供了一个成员函数is_lock_free&#xff0c;用于指示该原子类型是不是以无锁方式实现的&#xff1a; #include <iostream> #include <atomic> using namespace std;int main(){cout<<atomic_char().is_lock_free()<<endl;cout<<atomic…

【PostgreSQL】解决PostgreSQL时区(TimeZone)问题

问题描述 最近在使用PostgreSQL中&#xff0c;对行记录进行设置创建时间&#xff08;created_time&#xff09;时&#xff0c;出现了设置了now()时间而数据库中写入的数据是不一致的数据。 eg&#xff1a; insert into dept ( created_at, updated_at) VALUES (now(),now())…

线性表--队列-1

文章目录 主要内容一.队列基础练习题1.用链式存储方式的队列进行删除操作时需要 ( D ).代码如下&#xff08;示例&#xff09;: 2.若以1,2,3,4作为双端队列的输入序列&#xff0c;则既不能由输入受限的双端队列得到&#xff0c;又不能由输出受限的双端队列得到的输出序列是( C …

算法分析与设计课后练习22

设W(5,7,10,12,15,18,20)和M35&#xff0c;使用过程SUMOFSUB找出W种使得和数等于M的全部子集并画出所生成的部分状态空间树

宝塔天翼云部署记录

1.不要用宝塔的LNMP自动化工具&#xff1b;去商店里面安装&#xff1b; 2.选择Centos 版本8.0以下的&#xff0c;因为8以上不维护了。 3.记得开放端口&#xff0c;安全组下面。 4.安装FTP多次失败&#xff0c;虽然有些SB但是可以修复注意。 永别。 天翼云服务器80、443等特…

国产压力测试工具的主要作用

国产压力测试工具可以帮助软件开发和维护团队对系统进行全面的性能测试&#xff0c;以评估系统在高负载下的性能表现。以下是国产压力测试工具的主要作用&#xff1a; 性能评估&#xff1a;国产压力测试工具可以模拟多用户同时对系统进行访问和操作&#xff0c;通过对系统的响应…

Vite - 静态资源处理 - json文件导入

直接就说明白了 vite 中对json 文件直接当作一个模块来解析。 可以直接导入使用&#xff01; 可以直接导入使用&#xff01; 可以直接导入使用&#xff01;json文件中的key&#xff0c;直接被作为一个属性&#xff0c;可以单独被导入。 因此&#xff0c;导入json文件有两种方式…

金山云2023年Q3财报:持续向好!

11月21日&#xff0c;金山云公布了2023年第三季度业绩。 财报显示&#xff0c;金山云Q3营收16.3亿元&#xff0c;调整后毛利率达12.1%再创历史新高&#xff0c;调整后毛利额同比上涨57.5%。今年第三季度&#xff0c;公有云实现收入10.2亿元&#xff0c;毛利率达到4.7%&#xf…

反序列化漏洞介绍

反序列化漏洞 序列化和反序列化本身不存在漏洞&#xff0c;之所以会有反序列化漏洞&#xff0c;是因为开发者在编写时&#xff0c;加入了一些恶意的代码 PHP反序列化漏洞是一种安全漏洞&#xff0c;它允许攻击者利用未经验证的用户输入来执行恶意代码。这种漏洞通常出现在PHP…

OpenAI GPT-4 Turbo发布:开创AI新时代

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; IT杂谈 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一. GPT-4 Turbo的突破1.1上下文长度和控制手段的加强&#xff1a;1.2多模态支持&#xff1a…

UE必学系列(基础篇完结)

导语&#xff1a; UE必须系列基础篇完结&#xff0c;敬请期待进阶篇 基础篇文章&#xff1a;在掌握了UE4基础操作&#xff0c;并且能上手做一些项目之后&#xff0c;对UE4知识进行更完善的知识体系学习。主要是把学习视频链接汇总&#xff0c;主要学习思路是 优先官方视频和官…

Linux 网络:PMTUD 简介

文章目录 1. 前言2. Path MTU Discovery(PMTUD) 协议2.1 PMTUD 发现最小 MTU 的过程 3. Linux 的 PMTUD 简析3.1 创建 socket 时初始化 PMTUD 模式3.2 数据发送时 PMTUD 相关处理3.2.1 源头主机发送过程中 PMTUD 处理3.2.2 转发过程中 PMTUD 处理 4. PMTUD 观察5. 参考链接 1. …

vue路由传参的详解1.命名路由的传参和取出2.query传参和取出3.meta传参和取出4.其他方式5.注意点 代码和注释

Vue是一款流行的前端框架&#xff0c;其路由功能可以帮助我们实现单页应用&#xff08;SPA&#xff09;的跳转和页面切换。在实际开发中&#xff0c;我们会遇到需要在路由之间传递参数的情况&#xff0c;本篇博客将详细介绍Vue路由传参和取出参数的几种方式。 目录 1. 命名路由…

使用Python实现几种底层技术的数据结构

使用Python实现几种底层技术的数据结构 数据结构(data structure)是带有结构特性的数据元素的集合&#xff0c;它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系&#xff0c;并对这种结构定义相适应的运算&#xff0c;设计出相应的算法&#xff0c;并确保经过这…

千字文||无聊又数了一下千字文字数

千字文的字数去除标点符号真的整整一千个不多的不少 该文章无技术含量&#xff0c;仅三字经原文&#xff0c;学技术的同学可以止步了 千字文&#xff08;原文&#xff09; 【作者】周兴嗣 【朝代】南北朝 天地玄黄&#xff0c;宇宙洪荒。 日月盈昃&#xff0c;辰宿列张。 寒来…