Java面向对象编程(建议收藏)

2023-11-19

面向对象编程是一种方法,被广泛引用与Java中

接下来我将从:继承组合多态抽象类接口这几个方面进行全面的讲解。

 一、包

包是组织类的一种方式.

包从直观上看就是一个文件夹(jar包中包含的都是字节码文件).

包一般分为导入默认包、静态导入、和自定义导入三部分

导入默认包:

System.out.println(Arrays.toString(students));

当我们写这样一段代码时,Arrays不能直接使用,我们就需要导入java中的默认包来实现使用

import java.util.Arrays;

当我们还需要调用java.util中的其他包时我们可以将他们合并来使用

import java.util.*;

注意:java中对于包的调用是用那个调用那个。

静态导入:

在import后面加入static就为静态导入

import static java.lang.Math.*;

静态导入相较于其他导入来说可以更将方便的编写代码。

    public static void main(String[] args) {
        double x=30;
        double y=20;
        //静态导入之前
        //double result=Math.sqrt(Math.pow(x,2)+Math.pow(y,2));
        
        //静态导入之后
        double result=sqrt(pow(x,2)+pow(y,2));
    }

自定义导入:

对于自定义导入包,就是我们自己进行编写一个类的实现,然后我们在其他的包中的类中去调用这个类。

package Test16;
import practice01.practice01;
public class Test01 {
    public static void main(String[] args) {
        practice01 practice01=new practice01();
    }
}

常见的系统包:

1.java.lang:系统常用基础包(自动导入)

2.Java.lang.reflect:java反射编程包

3.java.net:进行网络编程开发包

4.java.sql:进行数据库开发的支持包

5.java.util:java的工具程序包

6.java.io:I/O编程开发包

二、继承

在这里我们首先要理解继承是为了干什么,继承是为了提高代码的使用率

class Animal{}
class Dog extends Animal{}

继承我们一般通过extends来实现

对于Animal我们一般叫做父类、基类,对于Dog我们一般叫做子类、派生类。

继承的思想就是通过extends抽取共性从而提高代码的重复使用率

小结:java中有四种访问权限

          private 只能在类内部进行访问,类外部不能访问。

          默认访问权限(包访问权限) 只能在同一个包内进行访问。

          protected 不仅可以在包内进行放访问,不同包类的子类也可以访问。

          public 在任何情况下类的调用者都可以进行访问。

一般来说在继承中我们一般使用protrcted访问权限

复杂的继承关系:

class Animal{}
class Dog extends Animal{}
class Water extends Dog{}
class Microorganism extends Water{}

我们可以一直继承,但是我们一般最多继承三次;

三、final关键字和组合

3.1final关键字

final修饰的关键字修饰一个变量或者字段时,表示常量不能被改变

final int a=10;
a=20;//编译出错

final修饰类的时候类不能被继承

final class Animal{}
class Dog extends Animal{}//报错

3.2组合

组合不像extends那样,组合仅仅是将一个类的实例作为另外一个类的字段

class Student{}
class Teacher{}
class School{
    public Student[] students;
    public Teacher[] teachers;
}

四、多态

4.1向上转型

我们通过实例化一个对象通过父类引用这个对象叫做向上转型。

向上转型我们分为:直接赋值、方法传参、方法返回

class A{
    void fly(){
        System.out.println("wwwwwwwww");
    }
}
class B extends A{

    @Override
    void fly(){
        System.out.println("eeeeeeeee");
    }

    void size(){
        System.out.println("发生了向下转型");
    }
}
public class Test01 {
    public static void main(String[] args) {
        //A a=new B();
        //a.fly();//发生了向上转型

        //B b=new B();
        //feed(b);//方法的传参

        //方法的返回
        //A a=find();
    }
    public static A find(){
        B b=new B();
        return b;
    }
}

4.2向下转型

注意:向下转型一定是发生在向上转型之后。

class A{
    void fly(){
        System.out.println("wwwwwwwww");
    }
}
class B extends A{

    @Override
    void fly(){
        System.out.println("eeeeeeeee");
    }

    void size(){
        System.out.println("发生了向下转型");
    }
}
public class Test01 {
    public static void main(String[] args) {
        //向下转型
        A a=new B();
        B b=(B)a;
        b.size();
        //向下转型一定是发生了向上转型之后才能发生的

    }
    public static A find(){
        B b=new B();
        return b;
    }

    public static void feed(A a){
        a.fly();
    }
}

4.3动态绑定

当子类和父类中出现同名方法时

class Shape{
    public void draw(){
        System.out.println("m");
    }
}
class Cycle extends Shape{
    @Override
    public void draw(){
        System.out.println("Q");
    }
}




        Shape shape=new Shape();
        Shape shape1=new Cycle();
        shape.draw();;
        shape1.draw();

我们发现他们调用的各自的draw方法

所以说要看这个引用指向的是父类还是子类对象,这个过程是运行时决定的,被称为动态绑定。

4.4重写

子类实现父类的同名方法,并且参数的类型和个数完全相同,这种情况称为重写。

class Shape{
    public void draw(){
        System.out.println("m");
    }
}
class Cycle extends Shape{
    @Override
    public void draw(){
        System.out.println("Q");
    }
}
class Rect extends Shape{
    @Override
    public void draw(){
        System.out.println("W");
    }
}
public class Test02 {
    public static void main(String[] args) {
        Shape shape1=new Cycle();
        Shape shape2=new Rect();
        drawShape(shape1);
        drawShape(shape2);
    }
    public static void drawShape(Shape shape){
        shape.draw();
    }
}

重写要注意的实项:

1、被final修饰的方法不能重写。

2、重写时子类的访问修饰权限要大于父类的权限

3、方法不能是static的

4.5理解多态

在我看来什么是多态,多态就是对于不同的调用者,我们调用的同一种方法可以表现出不同的形态,这种行为叫做多态。

package Test15;
class Animal{
    public String name;
    public Animal(String name){
        this.name=name;
    }
}
interface IFlying{
    void Fly();
}
interface IRunning{
    void Running();
}
interface ISwimming{
    void Swimming();
}

class Cat extends Animal implements IRunning{

    public Cat(String name) {
        super(name);
    }

    @Override
    public void Running() {
        System.out.println(this.name+"正在快乐的奔跑");
    }
}
public class Test05 {
    public static void main(String[] args) {
        Cat cat = new Cat("咪咪");
        cat.Running();
    }

}

五、抽象类

包含抽象方法的类我们叫做抽象类

abstract class Shape{
    abstract public void drow();
}

注意:

1.抽象类中可以定义成员属性和成员方法

abstract class Shape{
    int a;
    void size(){}
    abstract public void drow();
}

2.抽象类不能被实例化

3.抽象类存在的意义就是被继承,一个类如果继承了抽象类,那么他要重写它的所有方法;

4.抽象方法不能是final的且抽象方法不能是private的。

5.抽象类是可以发生向上转型和多态的

五、接口 

 接口里面的方法只能是抽象方法,方法的默认为pubilc abstract,接口中的成员变量默认为public static final

interface Shape{
    abstract public void drow();
}

注意:在JDK1.8之后普通方法也可以加入接口,但是要在前面加入default

default void asd(){}

 接口同样不能进行实例化

类和接口的关系需要通过implements来实现

interface Shape{
    abstract public void drow();
    default void asd(){}
}
class Shape01 implements Shape{
    
}

接口和接口的关系同样需要extends来继承

类可以继承多个接口但是需要用逗号隔开

接口也是可以发生向上转型和多态的

下面展示的是接口使用的例子:

package Test15;
class Animal{
    public String name;
    public Animal(String name){
        this.name=name;
    }
}
interface IFlying{
    void Fly();
}
interface IRunning{
    void Running();
}
interface ISwimming{
    void Swimming();
}

class Cat extends Animal implements IRunning{

    public Cat(String name) {
        super(name);
    }

    @Override
    public void Running() {
        System.out.println(this.name+"正在快乐的奔跑");
    }
}
public class Test05 {
    public static void main(String[] args) {
        Cat cat = new Cat("咪咪");
        cat.Running();
    }

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java面向对象编程(建议收藏) 的相关文章

  • 使用 Java-Large 文件查询 JSON 文件

    我正在尝试使用 java 解析下面的 JSON 文件 我需要能够 按 ID 或名称或对象中的任何字段搜索文件 也在字段中搜索空值 搜索应返回整个对象 该文件将会很大 并且搜索应该仍然很省时 id 1 name Mark Robb last
  • Java简单加密

    我想加密存储在磁盘上的文本 配置 文件 尝试使用DES http en wikipedia org wiki Data Encryption Standard加密 我在客户端计算机上遇到了致命错误 后来我发现该算法无法处理重音字符 我怀疑这
  • Java - 了解 PrintWriter 和刷新的需要

    好吧 首先我对所有代码表示歉意 但我觉得代码太多总比代码不够好 我正在制作一个简单的聊天客户端和印刷机 尤其是我正在努力解决的问题 使用现在的代码 它将与服务器类交互 并且完美地打印我想要打印的内容 但是 当我删除 writer flush
  • 从 Java 启动外部进程:stdout 和 stderr

    我正在使用标准从 java 启动一个外部进程java lang Process 我试图弄清楚该过程的输出是什么 但是采用结合了两者的格式stdout and stderr 目前 我有Process getInputStream它提供了访问s
  • Eclipse 内容协助无法在枚举常量参数列表中工作

    使用 eclipse 当我输入以下内容时 public enum Foo A Integer private final Integer integer private Foo Integer integer this integer in
  • Java 中的 TreeSet 与 C#.net 的等效项

    我有 Java 代码 其中包含TreeSet 我想将代码转换为 C 我可以使用哪个等效集合 如果没有 请提出替代方案 那将是系统 集合 通用 SortedSet
  • 带有 @Scheduled Spring 注释的方法的切入点

    我想要一个带有注释的方法的 AspectJ 切入点 Scheduled 尝试了不同的方法但没有任何效果 1 Pointcut execution org springframework scheduling annotation Sched
  • Hibernate、MySQL 视图和 hibernate.hbm2ddl.auto = 验证

    我可以在 Hibernate 中使用 MySQL 视图 将它们视为表 即 该实体与为表创建的实体没有什么不同 但是 当 Hibernate 设置为验证模型时 我的应用程序将不会部署 因为它找不到视图 因为它假设它是一个表 是否可以在启用部署
  • 从另一个类添加 Swing 组件

    我正在学习java 我正在尝试从另一个类向我的框架添加一个菜单栏 练习将代码划分为多个类以更好地组织程序 这是我的代码示例 public class MainApp public static void main String args C
  • Android Studio 找不到 com.android.support:support-v4:19.1.0

    我已将一个项目导入Android Studio但我收到错误 找不到 com android support support v4 19 1 0 我在哪里可以找到这个文件 我已经使用导入了项目Gradle 我有Android Studio v
  • 如何在Android中使用资源

    一个人如何使用资产 我有这个代码 AssetManager assets getAssets InputStream stream assets open test txt 看起来它只能在 Activity 类中使 用 如果我尝试在另一个类
  • APACHE POI 从 Java 中的 Excel 获取精确的字体颜色

    在 Excel 工作表中 如何使用 Java 中的 Apache POI 获取准确的字体颜色值 我试图通过使用来获取字体颜色 org apache poi ss usermodel Font f book getFontAt style g
  • C3P0:生产中未返回的连接超时?

    参数unreturnedConnectionTimeout给定时间段后未返回的连接超时 我正在尝试决定是否应该在我的制作中使用它persistence xml 使用它的一大优点是连接池将能够从泄漏的连接中恢复 一个很大的缺点是泄漏的连接将很
  • System.out.println("嗨"+6+10);打印Hi610?

    为什么要这样做 太令人困惑了 运算符优先级和结合性 两点 操作员 如果一个或两个参数都是字符串 则进行字符串连接 操作员 从左到右工作 所以在你的例子中 Hi 6 is Hi6 and Hi6 10 is Hi610 编辑 正如您在对另一个
  • 为什么我的 Java 路径中添加了“L”?

    我在我的类路径中加载了一个 jar 在 iReport 中 如果重要的话 我确信它具有所需的方法 但是当我尝试测试连接 从而调用该 jar 时 我得到一个 java lang NoSuchMethodError 说它正在引用班上 Lorg
  • 用什么? MVC、MVP 或 MVVM 还是……?

    我将启动一个 Java 项目来开发桌面应用程序 使用什么作为表示层模式 MVC MVP MVVM 或 如果可能的话 举一些可行的小例子 Actually the ultimate post you re looking for is thi
  • 丰富:数据表行跨度问题

    我需要创建一个 rich dataTable 甚至扩展 具有以下功能 我有一个公司类 其中包含产品对象的集合 我想展示下表 我仍然没有弄清楚如何使用子表执行此操作 在所有示例中 我发现子表具有与主表完全相同的列 据推测 我需要在前两列中使用
  • 使用 Spring Batch 将文件中的日期解析为 LocalDateTime

    我正在尝试使用 Spring Batch 读取包含日期的 CSV 文件 但在将日期解析为LocalDateTime Object 字段 日期 上的对象 目标 中的字段错误 拒绝值 2017 07 20 04 15 25 0 代码 typeM
  • Java:如何检测(并更改?)System.console 的编码?

    我有一个在控制台上运行的程序 其变音符号和其他特殊字符在 Mac 上以 的形式输出 这是一个简单的测试程序 public static void main String args System out println h h System
  • selenium 没有找到合适的方法,直到(ExpectedCondition)

    这是有线的问题 我导入的项目运行 100 几个月前 今天我已将其与依赖项一起导入 但存在问题WebDriverWait 这是我的代码 WebDriverWait driverWait new WebDriverWait driver 100

随机推荐

  • GPU压力测试和故障定位

    压力测试 获取gpu burn https codeload github com wilicc gpu burn zip master 解压缩 unzip gpu burn master zip 进入目录编译 cd gpu burn ma
  • 关于python爬虫的准备工作

    目录 1 什么是网络爬虫 2 准备工作 1 什么是网络爬虫 百度百科所给注释如下 网络爬虫 又称为网页蜘蛛 网络机器人 在FOAF社区中间 更经常的称为网页追逐者 是一种按照一定的规则 自动地抓取万维网信息的程序或者脚本 另外一些不常使用的
  • vm使用PE安装系统(2)

    接上次教程 vm使用PE安装系统 1 提要 此虚拟机安装方法适用于所有系统格式如ISO ESD GHO WIM等系统格式 第一步 打开DG硬盘分区 选择左侧栏进行的 HD0 右键选择快速分区 一般情况下选择自定义选择两个分区 然后右边内容栏
  • 芯片开发语言的简单区别介绍。Verilog、VHDL、System Verilog、SystemC、Matlab、C/C++等

    芯片开发语言的简单区别介绍 芯片设计前端的流程很长 和芯片前端相关的语言也很多 比如Verilog VHDL System Verilog SystemC Matlab C C 等等 但没有一个语言能够做到适合于整个前端流程 每种语言都有适
  • 【Kubernetes运维篇】零故障升级Pod健康探测详解

    文章目录 一 Pod健康探测介绍 1 三种容器探测方法 2 常用三种探测探针 3 探针相关属性说明 二 探测案例 1 Pod启动探测案例 startupProbe 2 Pod存活探测案例 livenessProbe 3 Pod就绪探测案例
  • QT QComboBox使用详解

    本文详细的介绍了QComboBox控件的各种操作 例如 下拉框添加内容 默认显示 获取下拉框总行数 获取选中索引 获取当前内容 清除列表 重绘下拉框等操作 本文作者原创 转载请附上文章出处与本文链接 QComboBox控件全面详解目录 1
  • RNA 31. SCI文章临床蛋白质组肿瘤在线数据挖掘神器(CPTAC)

    桓峰基因公众号推出转录组分析教程 有需要生信的老师可以联系我们 转录分析教程整理如下 RNA 1 基因表达那些事 基于 GEO RNA 2 SCI文章中基于GEO的差异表达基因之 limma RNA 3 SCI 文章中基于T CGA 差异表
  • 框架学习——带你了解SpringBoot框架

    目录 一 SpringBoot简介 1 1 原有Spring优缺点分析 1 1 1 Spring的优点分析 1 1 2 Spring的缺点分析 1 2 SpringBoot的概述 1 2 1 SpringBoot的特点 1 2 2 Spri
  • Qt(day3)

    思维导图 小练习 second h ifndef SECOND H define SECOND H include
  • (145) Table ‘./addon_collect_wukong_spider‘ is marked as crashed and should be repaired解决思路

    discuz更新插件时报错 145 Table addon collect wukong spider is marked as crashed and should be repaired解决办法 解决思路 打开phpmyadmin 选择
  • 用磁盘压缩卷新建分区和磁盘压缩卷还原问题

    转载 磁盘压缩卷新建分区 http jingyan baidu com article fedf073776922935ad897751 html 磁盘压缩卷还原 https zhidao baidu com question 304344
  • Linux常用命令之文件管理命令

    目录 1 ls 2 gt 输入 输出重定向和 管道命令 3 chmod命令 4 cd命令 5 mkdir和rmdir命令 6 cp命令 7 rm命令 8 mv命令 9 cat命令 10 pwd命令 11 ln命令 12 grep命令 13
  • http协议学习系列

    1 基础概念篇 1 1 介绍 HTTP是Hyper Text Transfer Protocol 超文本传输协议 的缩写 它的发展是万维网协会 World Wide Web Consortium 和Internet工作小组IETF Inte
  • 数据集加载--load_digits

    目录 主要参数 n class return X y as frame 返回值 return X y True return X y False Bunch对象的属性 data target feature names list targe
  • 100天精通Python(爬虫篇)——第47天:selenium自动化操作浏览器(基础+代码实战)

    文章目录 一 Selenium框架环境搭建 1 下载模块 2 安装浏览器驱动WebDriver 二 基础操作 1 打开浏览器 2 无界面模式 3 元素定位 4 元素操作 5 前进后退 6 执行js 7 页面等待 隐式等待 常用 显式等待 了
  • SPI、I2C、UART、CAN

    一 简介 1 SPI SPI Serial Peripheral Interface 串行外设接口 是Motorola公司提出的一种同步串行数据传输标准 在很多器件中被广泛应用 接口 SPI接口经常被称为4线串行总线 以主 从方式工作 数据
  • Go内存管理及性能观测工具

    内存管理 TCMalloc Golang内存分配算法主要源自Google的TCMalloc算法 TCMalloc将内存分成三层最外层Thread Cache 中间层Central Cache 最里层Page Heap Thread Cach
  • 利用hbase api在本地访问并操作服务器的hbase数据库

    最近因为实验室项目需要 开始研究了hbase 然后想一次性往集群服务器上写入大量的数据 并存到hbase中 考虑到在hbase shell下只能单个数据put 这样对于批量插入数据的要求完全不合适 于是就研究起hbase的java api
  • 只要 3 个注解,优雅的实现微服务鉴权!

    原创 不才陈某 码猿技术专栏 2023 04 17 08 50 发表于山东 大家好 我是不才陈某 前面的文章中介绍了网关集成Spring Security实现网关层面的统一的认证鉴权 有不清楚的可以看之前的文章 实战干货 Spring Cl
  • Java面向对象编程(建议收藏)

    面向对象编程是一种方法 被广泛引用与Java中 接下来我将从 包 继承 组合 多态 抽象类和接口这几个方面进行全面的讲解 一 包 包是组织类的一种方式 包从直观上看就是一个文件夹 jar包中包含的都是字节码文件 包一般分为导入默认包 静态导