首页 > 编程语言 >Java基础第四弹-----多态、抽象类、接口和异常

Java基础第四弹-----多态、抽象类、接口和异常

时间:2024-07-29 19:56:16浏览次数:19  
标签:Java 对象 子类 多态 接口 ----- 抽象类 父类 方法

文章目录


Java基础知识全解第四弹

记录回顾自己学过的java常见的基础知识,希望可以给初学者一些帮助,如果合适的话希望各位给一个免费的点赞和关注,在此谢谢各位了。

一、 final

1.概述

子类可以在父类的基础上改写父类内容,比如,方法重写。那么我们能不能随意的继承 API中提供的类,改写其内容呢?显然这是不合适的。为了避免这种随意改写的情况,Java提供了 final 关键字, 用于修饰不可改变内容。

final: 不可改变。可以用于修饰类、方法和变量。
类:被修饰的类,不能被继承。 比如我们的String、Math
方法:被修饰的方法,不能被重写。 
变量:被修饰的变量,不能被重新赋值,常量。    
2. 使用场景
  • 修饰类
final class 类名 {
}

public final class Stringpublic final class Mathpublic final class Scanner 等,很多的类,都是被final修饰的,目的就是供我们使用,而不让我们所以改变其内容。

  • 修饰方法
修饰符 final 返回值类型 方法名(参数列表){
	//方法体
}

重写被final修饰的方法,编译时就会报错。

3.总结

它可以用来修饰类,修饰方法,修饰变量。

被final修饰的类称为最终类,最终类不能被继承。

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

被final修饰的变量不能被更改。

定义常量

public static final 类型 常量名 =常量值;

二、继承中的构造方法

①在子类对象构造的过程中,必须先构造其父类对象
②在子类的构造方法中,自动先调用父类的构造方法,然后才会继续往下执行构造子类对象
③在子类的构造方法中,可以使用super(参数列表)调用父类指定的某个构造方法
④如果写了super(参数列表),则必须写在子类构造方法的第一行,否则报错

⑤.如果子类中没有写super(参数列表),而父类中又有没有无参的构造方法,则编译报错。

三、前景知识

1.Object

这是所有类的根基类,当一个类不继承任何父类,就相当于继承了Object类,任何一个类都可以使用Object类中提供的方法

2.toString()

这是Object类提供的一个用来描述一个对象的方法,它返回一个String,表示该对象的字符串表示

3.instanceof

判断某个对象是否是某个类或某个类的子类的对象。

4.equals()

Object类中的equals()用来比较当前对象和传入的对象是否相等,Object类的equals()比较的是内存地址,当且仅当两个对象是同一个对象时,才返回true,所以我们需要重写equals(),把我们认为相等的标准写入equals()中。

四、多态

1. 多态定义

封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的 只是它的访问方法。

继承是为了重用父类代码。两个类若存在IS-A的关系就可以使用继承。

多态(Polymorphism)是面向对象编程中的一个核心概念。它指的是在不同的上下文中,使用同一个方法名或操作符来执行不同的操作。简单点来说,当父类引用指向子类对象的时候,由父类的引用去调用父类的方法,实际上调用到的是子类重写过后的方法。

2. 多态条件

1、要有继承;
2、要有重写;
3、父类引用指向子类对象

3.两种转型方式
3.1向上转型

子类自动转换成父类(父类引用指向子类对象)

例子:

Bird bird = new BailingBird();
Bird wuYa = new WuYa();
wuYa.shout();

说明:父类引用指向子类对象

父类引用可以赋值为其子类的对象,该引用只能访问到子类对象中的父类成员,无法访问到子类新增的成员。

我们可以理解为:把子类对象当成父类对象去使用,这种写法在Java称为“向上转型”。

3.2 向下转型

父类转子类

例子:

编译阶段是父类类型,运行时阶段是子类类型
Bird bird = new BailingBird();
BailingBird bb = (BailingBird) bird;
System.out.println(bb);

格式 (子类类型)父类引用

作用:

当父类对象引用指向子类对象的时候,我们可以将其父类的类型转成子类的类型,转型后,该引用就可以访问子类中新增加的成员。

好处:对象的“向上转型”和“向下转型”可以使我们的代码可拓展性好。

==注意:==如下强制转换会出现ClassCastException

  • 父类不能直接转换成子类

  • 同类之间不能相互转换

  • 不同类之间不能相互转换

4.为什么要转型

向上转型:多态的体现,可以表示父类对应的多个子类对【弊端:子类某些功能无法使用】

向下转型:为了重新获得因为向上转型而丢失的子类特性而存在

五、抽象类

1.定义

在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。所有抽象类代表抽象的概念的类,是不能具体的被创建出来的,也就是说不能通过new关键字来创建抽象类的对象。

2.格式

语法:

abstract class 类名{
    属性...
    方法:普通他方法、抽象方法
}

注意事项:

1.抽象类不能被实例化。
2.抽象类可以有构造函数,被继承时子类必须继承父类一个构造方法,抽象方法不能被声明为静态。
3.抽象方法只需申明,而无需实现,抽象类中可以允许普通方法有主体
4.含有抽象方法的类必须申明为抽象类
5.抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类。
3.抽象方法

通过关键字abstract修饰的方法就是抽象方法(一个方法只有声明没有实现,那么这个方法叫抽象方法,抽象方法必须被abstract修饰)

  	1、抽象方法没有方法体
  	2、子类必须要重写父类的抽象方法,

抽象类和普通类的区别

1、普通类可以去实例化调用;抽象类不能被实例化,因为它是存在于一种概念而不非具体。
2、普通类和抽象类都可以被继承,但是抽象类被继承后子类必须重写继承的方法,除非子类也是抽象类。
4.总结

含有抽象方法的类叫抽象类,抽象类必须被abstract修饰,抽象类不能被实例化,当子类继承抽象类,必须重写其中的抽象方法。

六.接口

1.定义

接口是抽象方法和常量的集合,接口中的方法是抽象的,无需去写abstract,接口中的方法也是公共的,无需去写public。

我们使用interface定义一个接口:

public interface 接口名{
	静态常量和抽象方法;
}
2.接口的使用
2.1 我们使用implement来将一个类实现某个接口。

①一个类实现了一个接口,就必须重写接口中的全部抽象方法

接口的引用可以指向其实现类的对象,当该引用调用接口中的抽象方法时,实际上调用的是实现类重写过后的方法,所有接口具有多态性

③ Java中的接口是多实现的,一个类可以实现多个无关的接口,当接口引用指向实现类对象时,该引用只能访问其重写当前接口的方法,但其可以转型成其他接口类型,从而访问其他接口中的方法。

④接口也体现了面向对象的封装性

3.为什么使用接口

Java接口和Java抽象类代表的就是抽象类型,就是我们需要提出的抽象层的具体表现。OOP面向对象的编程,如果要提高程序的复用率.

七.异常

1.异常的定义
2.异常处理

五个关键字:try、catch、finally、throw、throws

①try代码块----尝试运行可能发生异常的代码。

②catch代码块------发生异常时,捕获异常对象并进行处理。

③throw-----抛出一个异常对象

④throws----告诉调用者抛出什么类型的异常对象

⑤finally--------这是跟在try/catch后面的三个代码,它里面的代码无论抛不抛出异常,都一定会执行。

3.异常类结构

​ Throwable//第一层

​ Error Exception //第二层

​ RuntimeException 检查异常//第 三层 //第四层

//第n层

注意:当一个try对应多个catch的时候,多个catch异常类是继承关系,那么必须将子类异常写在父类异常前面。

总结

java基础第四弹,主要介绍了java中多态、抽象类、接口和异常等相关知识,我在整理资料和编写的过程中,完成了对这些java相关知识的梳理和深刻理解。希望我对知识梳理的成果对各位读者有所帮助。再次感谢各位的阅读,一个菜鸟的起飞之路。

标签:Java,对象,子类,多态,接口,-----,抽象类,父类,方法
From: https://blog.csdn.net/qq_65124761/article/details/140674494

相关文章

  • tomato-靶机渗透
    tomato-靶机一、安装靶机环境下载双击.ova文件,写文件名路径导入打开虚拟机用NAT模式编辑–>虚拟网络编辑器查看IP段二、信息收集1.御剑端口扫描查找该虚拟机的IP访问网站扫目录dirbhttp://192.168.30.130收集到目录/server-status/antibot_image//ind......
  • 深圳大学-计算机系统(1)实验-简单游戏设计
    实验目的与要求(1)熟悉和理解LC-3的子程序指令格式。(2)掌握利用子程序解决问题的思路,加深对底层硬件的理解。实验内容具体一点:https://users.ece.utexas.edu/~patt/04f.306/LabAssignments/Lab5/lab5.html根据点和盒子游戏提供的一个通用框架以及一些提供好的子程序。......
  • 阿里云天池——零基础入门数据挖掘 - 二手车交易价格预测
    赛题数据见官网:零基础入门数据挖掘-二手车交易价格预测_学习赛_天池大赛-阿里云天池的赛制(aliyun.com)因为本人第一次接触神经网络的深度学习,在此就将教学代码逐框解析1.1导入用于数据处理、模型训练、数据加载以及可视化的Python库%matplotlibinlinefromsklearn.m......
  • javadoc
    javadoc命令是用来生成自己API文档的参数信息@author作者名@version版本号@since指明需要最早使用的jdk版本@param参数名@return返回值情况@throws异常抛出情况packagecom.studen.base;/***@authorshudou*@version1.0*@since1.8*/publicclass......
  • CF1523D Love-Hate 题解
    CF1523DLove-Hate题解传送门题目大意:给定\(m\)和\(n\)个集合,而且这\(n\)个集合的元素都是\(1\)~\(m\)中的数且没有重复,而且大小都不超过\(15\)。求一个最大的集合,使得这个集合是至少\(\left\lceil\frac{n}{2}\right\rceil\)个集合的子集。先想一个问题:题目是让......
  • P8347 「Wdoi-6」另一侧的月 题解
    P8347「Wdoi-6」另一侧的月题解第一次自己思考出来紫题,题解纪念一下。下面为大家讲解如何一步步推到最终结论:首先,原树没有根,不妨设它的根为\(1\),将它转化成有根的,便于操作。为了方便描述,我们称将一个非根节点的点的父亲删去,保留含这个点的连通块这个操作为截取操作(就是......
  • 多队列网卡-虚拟机Linux系统设置
    多队列网卡安装作者使用的是ubuntu20.04,VMWARE首先查看系统上的网卡ipa#查看网卡信息查看ens33是否支持多队列网卡,如果是下图这种情况就是不支持多队列网卡。cat/proc/interrupts|grepens33#proc是linux虚拟文件系统关闭虚拟机,添加多个网卡修改VMWAE......
  • Java初学-Day3
    一、数据类型(本期只讲基本数据类型)变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。 因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。Jav......
  • 小一保姆级 python三大核心多态、抽象类、动态添加内容详解
    一.多态多态是面向对象编程中的一个核心概念,它允许一个接口被多个数据类型实现。这意味着,即使多个类具有不同的内部实现,它们也可以共享一个公共接口。多态的实现通常依赖于继承和方法重写。继承:子类继承父类的属性和方法。方法重写:子类重写父类中的方法,以提供特定的实现。......
  • 可变阶数高斯消元算法-passcal-c shap-c语言
    高斯消元法在各种工程领域都有广泛的应用,尤其是在需要求解线性方程组的情况下。尽管高斯消元法在某些情况下可能不是最高效的算法,但它仍然是一个强大且通用的工具,对于许多工程问题来说是非常实用的。随着计算机性能的提高,高斯消元法在处理大规模问题时也变得更加可行。高斯消......