【Java挠头】继承、抽象、接口、多态、向上转型、向下转型等精妙干货

简介: 【Java挠头】继承、抽象、接口、多态、向上转型、向下转型等精妙干货

–本文摘要–

   1、本文的目标读者:是了解Java基础,且对面向对象概念有所了解,但是对Java中继承、抽象类、接口、多态等等概念搞不清的初学者。

   2、本文的内容摘要:讲述Java中的一些易混概念,static关键字、继承、重载、重写、多态、抽象类、接口、final关键字。

   【版权声明】归CSDN账户[征途黯然.]/公众号[三黄工作室]原创,禁止任何网站与个人采集或转载。

一、static关键字


   static最常见到是在java类中的主函数main的定义那里。关于static关键字,在日常开发中主要记住2个功能:

1、static修饰属性,这个属性提升为类所有,类、类的所有实例化对象共用这个static属性,一般借此可以实现在线人数统计等功能。

2、static修饰方法,这个方法提升为类所有,这样类就可以直接调用,不需要等类实例化为对象,在项目中,一些配置信息可以这样定义使用。

二、继承


   继承的概念不难理解,一个父类A.java,可以派生出多个子类B.java。基本写法如下:

class A{}//父类
class B extends A{}//子类

【重点】

1、继承是为了实现代码重用(即多次利用,与‘重写’无关)功能而产生的,子类继承了父类后,可以实现代码功能上的拓展。见下图2-1的说明。

2、继承可以多层继承,但是不能多重继承。白话就是,C可以继承B、B再继承A,但是 C不能同时继承B与A。

3、子类实例化时,会先调用父类的构造函数,然后再调用自己的构造函数。

4、B继承了A,在B中继续写一些方法叫做拓展,如果B重新写了一个父类A中已有的方法,叫做重写Override),也说覆写

image.png

三、重载(Overloading)


   重载,也就是方法的重载。多个方法拥有同一个方法名,通过返回值类型、形参个数等的不同,让Java来执行不同的方法。最最典型的就是类的构造函数,无参构造、有参构造等等,比较好理解,不多描述。

四、重写(Override)


   重写,也叫做覆写,多伴随继承、接口、抽象类等概念出现。它们都是在父类或接口中先定义方法,然后子类或接口实现类重写方法。

⭐五、多态性


20210511193410529.png

  参见上图5-1,多态性分为方法与对象的多态,主要讲解对象的多态性。对象的多态性分为向上转型和向下转型,其中向上转型特别重要!此处建议结合本文与理论介绍食用。

   代码示例:

class A{}
class B extends A{}
/*******main函数内*********/
A a = new B();//向上转型
B b = (B)a;//向下转型

【重点】

1、【发生对象的多态性的前提】:必须有两个类,它们互相是继承和派生关系。白话就是有一个父类,一个子类,向上转型或者向下转型发生在它们之间。


2、【向上转型】:如上面的代码块A a = new B();。基本理解是,等号左边声明的是父类的引用,等号右边是创建了子类实例,把子类对象转成父类,名曰‘向上转型’。


3、【向下转型】:如上面的代码块A a = new B();B b = (B)a;。首先,必须有向上转型的出现(即A a = new B();),才能把a向下转型。基本理解是,等号左边声明的是子类的引用,等号右边是已经向上转型了的父类引用,把父类引用转成子类,名曰‘向下转型’。


4、【自动转换、强制转换】:自动转换、强制转换是向上转型、向下转型的别称,我们可以通过下图5-2来理解这两个别称。


图中第一行代码:A a = new B();首先定义了一个A类型的引用a,但是赋给a的值是A类的派生类B。a先是去匹配当初定义的类型A的空间,然后再根据等式右边的B的空间,尝试能否转移到B类的空间上。结果由于B继承A,前面的描述是可行的,于是A类型的引用a,映射了类A的空间,最终转移到了类B的空间。称为‘自动转换’。


图中第二行代码:B b = (B)a;这是向下转型。向下转型的前提就是a已经向上转型了,按下图的描述就是A类型的a引用已经映射了类B的空间。在这个前提下,才能把a强制转换为B类的引用(因为它们最终映射的空间是一样的,都是B空间)。我们把引用a转换为引用b,引用a中间还映射了类A的空间,这个过程在引用b这里已经没有了。我们把这样的转化称为‘强制转换’。

20210511213839927.png

5、【举个例子】:在Java中,Object类是所有类的最终父类。我们在项目中,想要定义一个HashMap结构,但是它存放的可能是String类型、Integer类型、自定义类型,我们不可能为每种类型定义一个HashMap,我们会这样写:

HashMap<String,Object> content = new HashMap<>();
content.put("aa","name");
content.put("bb",123);

⭐⭐这样定义之后,我们的Hash结构就能存放各种数据类型的数据了,这就是向上转型的经典运用!我们定义的Object类型,就像是一个大收纳盒,各种数据类型过来后,由于它们都是Object的派生类,都会向上转型。

六、抽象类(abstract)与接口(interface)


   抽象类经常与接口混淆。首先把握一点就是接口比抽象类地位要高。

【区别】

1、抽象类要被子类继承,接口要被类实现。

2、接口只能做方法声明,抽象类中可以作方法声明,也可以做方法实现。

3、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

4、抽象类可以有具体的方法和属性,接口只能有抽象方法和不可变常量。

5、抽象类主要用来抽象类别,接口主要用来抽象功能。

七、final关键字


   final也叫终结器。在实际开发中,会用到final的三个功能:

1、final修饰类,类不可被继承

2、final修饰方法,方法不可重写

3、final修饰的变量成为常量,值不可修改

相关文章
|
6月前
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
302 1
|
7月前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
237 11
|
8月前
|
存储 缓存 安全
Java集合框架(二):Set接口与哈希表原理
本文深入解析Java中Set集合的工作原理及其实现机制,涵盖HashSet、LinkedHashSet和TreeSet三大实现类。从Set接口的特性出发,对比List理解去重机制,并详解哈希表原理、hashCode与equals方法的作用。进一步剖析HashSet的底层HashMap实现、LinkedHashSet的双向链表维护顺序特性,以及TreeSet基于红黑树的排序功能。文章还包含性能对比、自定义对象去重、集合运算实战和线程安全方案,帮助读者全面掌握Set的应用与选择策略。
874 23
|
8月前
|
存储 安全 Java
Java集合框架(一):List接口及其实现类剖析
本文深入解析Java中List集合的实现原理,涵盖ArrayList的动态数组机制、LinkedList的链表结构、Vector与Stack的线程安全性及其不推荐使用的原因,对比了不同实现的性能与适用场景,帮助开发者根据实际需求选择合适的List实现。
|
8月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
8月前
|
安全 Java 开发者
Java集合框架:详解Deque接口的栈操作方法全集
理解和掌握这些方法对于实现像浏览器后退功能这样的栈操作来说至关重要,它们能够帮助开发者编写既高效又稳定的应用程序。此外,在多线程环境中想保证线程安全,可以考虑使用ConcurrentLinkedDeque,它是Deque的线程安全版本,尽管它并未直接实现栈操作的方法,但是Deque的接口方法可以相对应地使用。
467 12
|
8月前
|
Java API 网络架构
java调用api接口自动判断节假日信息
java调用api接口自动判断节假日信息
3148 0
|
Java 调度
Java基础-抽象队列同步器:AbstractQueuedSynchronizer(2)-AQS的源码
一般来说,自定义同步器要么是独占方法,要么是共享方式; 他们也只需实现tryAcquire-tryRelease、tryAcquireShared-tryReleaseShared中的一种即可。 AQS也支持自定义同步器同时实现独占和共享两种方式,如ReentrantReadWriteLock。
279 0
|
6月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
332 1
下一篇
开通oss服务