大家好,Java核心概念解析:方法重写与重载、final关键字、多态性、单例设计模式、抽象类与接口、访问控制及包管理相信很多的网友都不是很明白,包括也是一样,不过没有关系,接下来就来为大家分享关于Java核心概念解析:方法重写与重载、final关键字、多态性、单例设计模式、抽象类与接口、访问控制及包管理和的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
子类中出现与父类中相同的方法声明,也称为方法重写、方法重写。
方法重载概述
该类中出现的方法具有相同的名称,但参数列表不同。与返回值无关。
使用特点:
如果方法名不同,则调用对应的方法
如果方法名相同,最终将使用子类自己的方法。
方法重写的应用:
当子类需要父类的功能,并且功能主体子类有自己独特的内容时,可以重写父类中的方法。这样既继承了父类的功能,又定义了子类特有的内容。
方法重写的注意事项
A: 父类中的私有方法不能被重写(因为子类根本无法继承父类的私有方法)
B: 子类重写父类方法时(访问权限不能低,最好保持一致)
C: 父类静态方法,子类也必须通过静态方法重写
当子类重写父类方法时,最好将其声明为完全相同。
方法重写和方法重载有什么区别?方法重载可以改变返回值类型吗?
方法重写:在子类中,出现与父类中相同的方法声明。方法重载:在同一个类中,方法名称看似相同,但参数列表不同。方法重载可以改变返回值类型,因为它与返回值类型无关。
final关键字
在Java中声明类、属性、方法时,可以使用关键字final来修饰,意思是“最终的”。最后一个关键字是修饰符。
修改类,类不能被继承
通过修改变量,变量就变成常量并且只能被赋值一次。
修改方法,方法不能被覆盖
.final在继承中是如何体现的?
因为继承方法中存在一种现象:方法重写。因此,父类的功能会被子类覆盖。有时候,为了防止子类重写父类的功能,只能由他自己使用。因此,针对这种情况,Java提供了一个关键字:final。
例子
多态
可以理解为一种事物的多种表现形式
重载以前的方法和重写方法也是多态的一种形式。
子类对象的多态性(可以直接应用于抽象类和接口,下面会讲到)
在Java中,可以使用子类的对象来代替父类的对象。
我们在以后的学习中会经常和多态打交道,比如:IO、集合、JDBC等。
使用前提条件
继承并实现(接口)
子类需要重写父类的方法,使得子类有不同的方法实现。
对象多态格式
将父类类型的引用指向子类的对象:向上转型(upcasting)
左边看=,是对父类的引用
右边看=,是子类的对象
向上转型
将子类引用的对象转换为父类类型称为向上转型。通俗地说,就是将子类对象转换为父类对象。这里的父类对象可以是一个接口
虚方法调用
子类的对象实体是通过父类的引用来指向的。当方法被调用时,实际执行的是子类重写父类的方法。
注意
对象的多态性不适用于子类对象的新方法
子类对象的多态性不适用于属性
子类对象的多态性不适用于静态方法
向上转型和向下转型
向上转型:将子类引用的对象转换为父类类型称为向上转型。通俗地说,就是将子类对象转换为父类对象。这里的父类对象可以是一个接口
向下转型:将父类引用的对象转换为子类类型称为向下转型
向上转型和向下转型多态性的优点
可以增强程序的可扩展性和可维护性,使代码更加简洁。
不仅可以减少编码工作量,还可以大大提高程序的可维护性和可扩展性。
单例模式
类的对象只有一个实例
如何设计
如果我们想让一个类在虚拟机中只产生一个对象,首先要将该类的构造函数的访问权限设置为private
不能使用new运算符在类之外直接生成类的对象。
调用类的静态方法之一以返回在类中创建的对象
静态方法只能访问类中的静态成员变量,因此类内部生成的指向类对象的变量也必须定义为静态
分类
线程安全
惰性、非线程安全
抽象类abstract
抽象类是非特定类
当使用abstract关键字修饰一个类时,该类就称为抽象类。同样,当使用abstract关键字修饰一个方法时,该方法就称为抽象方法。
抽象类和抽象方法必须用abstract关键字修饰
格式
抽象类类名{}
公共抽象无效吃();
抽象类不一定有抽象方法。具有抽象方法的类一定是抽象类。
抽象类不能被实例化
因为它不是具体的。
那么,如何实例化抽象类呢?
以多态的方式,它由特定的子类实例化。其实这也是一种类型多态,抽象类多态。
抽象类的子类
如果不想重写抽象方法,则子类就是抽象类。
重写所有抽象方法。这时,子类就是一个具体类。
例子
抽象类——注:
抽象类有构造函数(所有类都有构造函数)
抽象方法所在的类必须是抽象类
抽象类中不能有抽象方法
不能使用抽象来修改属性、私有方法、构造函数、静态方法和最终方法。
抽象类VS 通用类:
相似点:
抽象类和通用类都是用来描述事物的,并且都有内部定义的成员。
不同的:
一般类有足够的信息来描述事物;抽象类可能没有足够的信息来描述事物。
通用类可以被实例化。抽象类不能被实例化。
一般类中不能定义抽象方法,只能定义非抽象方法。抽象类中可以定义抽象方法,也可以定义非抽象方法。
抽象方法——注:
抽象方法必须是public或者protected(因为如果是private的话,就不能被子类继承,子类也不能实现该方法)。默认是公开的。
抽象方法只保留方法的功能,具体的执行交给继承抽象类的子类,子类重写这个抽象方法。
如果一个子类继承了一个抽象类并重写了所有抽象方法,那么这个类就是一个“实体类”并且可以被实例化。
如果一个子类继承了一个抽象类,并且没有重写所有抽象方法,也就是说这个类中还存在抽象方法,那么这个类就必须声明为抽象的!
接口
示例接口是抽象方法和常量值的定义的集合
本质上,接口是一种特殊的抽象类,它只包含常量和方法的定义,而不包含变量和方法的实现。
为什么要有接口?
Java不支持多重继承
在Java中要定义类,请使用关键字class,要定义接口,请使用关键字interface。
格式:
接口接口A{ }
如何实现接口
在Java中,关键字extends用于继承类,关键字implements用于实现接口。
类子类实现InterfaceA{ }
类之间有继承关系,类与接口之间有实现关系。
使用关键字implements实现接口,然后重写接口中定义的抽象方法
接口详情
接口可以被认为是一个特殊的抽象类。它是常量和抽象方法的集合。它不能包含变量或通用方法。
接口中的所有成员变量默认都是public static final(固定)修饰的。
接口中的所有方法默认都被publicabstract修饰(固定)。
从以上两点可以看出:接口中的成员具有公共权限
接口没有构造函数,无法实例化。
接口定义了一个函数。该功能可以通过类来实现。
实现接口的类必须重写所有抽象方法才能实例化。
如果一个实现接口的类没有重写所有抽象方法,那么这个类仍然是抽象类。
一个类可以实现多个接口(用逗号分隔)。 java中的类继承是单继承
一个类在继承另一个类的同时还可以实现多个接口。
与继承类似,接口和实现类之间也存在多态性
接口VS 抽象类的区别
相似点:
接口和抽象类都不能被实例化。只能由其他类实现和继承。
接口和抽象类都可以包含抽象方法。实现接口和抽象类的类必须实现这些抽象方法,否则实现的类就是抽象类。
差异:
抽象类和接口的定义不同:抽象类、接口interface
接口只能包含抽象方法,不能包含实现方法;抽象类可以包含普通方法。
接口中不能定义静态方法;静态方法可以在抽象类中定义
接口中只能定义静态常量属性,不能定义普通属性;普通属性和静态常量都可以在抽象类中定义。
该接口不包含构造函数;抽象类可以包含构造函数。抽象类中的构造函数并不是用来创建对象的,而是允许其子类调用这些构造函数来完成属于抽象类的初始化操作。
接口不包含初始化块,但抽象类可以包含初始化块
一个类最多只能有一个直接父类,包括抽象类;但一个类可以直接实现多个接口。通过实现多个接口,可以弥补Java中单一继承的缺点。
注意
接口之间存在继承关系,使用extends关键字,接口可以继承多个接口InterfaceA extends InterfaceB { }
在开发中,类不应该继承已经实现的类。它应该继承一个抽象类或实现一个接口。
总结
通过接口,可以实现不相关的类的相同行为,而无需考虑这些类之间的层次关系。
接口可以指定多个类需要实现的方法,一般用于定义对象的扩展功能。
接口主要用于定义规范。解耦关系。
权限修饰符
修饰符:
权限修饰符:私有、默认、受保护、公共
状态修饰符:static、final
抽象修饰语:抽象
种类:
权限修饰符:默认修饰符,public
状态修正:最终
抽象修饰语:抽象
最常用的是:public
成员变量:
权限修饰符:私有、默认、受保护、公共
状态修饰符:static、final
最常用的是:private
施工方法:
权限修饰符:私有、默认、受保护、公共
最常用的是:public
会员方法:
权限修饰符:私有、默认、受保护、公共
状态修饰符:static、final
抽象修饰语:抽象
最常用的是:public
其他组合规则:
成员变量:
公共静态最终
会员方法:
公共静态
公共摘要
公开决赛
包
包是Java提供的一种区分类的命名空间的机制。它是一种组织类以及相关类和接口集合的方式。它提供了访问权限和命名的管理机制。
打包申请
1. 报关包
添加:源文件开头的package包名(需全部小写,防域名系统)
IDE下声明包的两种方式
通过创建包,您可以声明该包,然后在该包下创建一个类。
创建类时指定包
理解:
包在文件中的表示形式是文件夹目录结构,功能相似的类放在同一个目录下。
类被打包,允许相同的类名存在于不同的包中
2. 使用包
如果当前类想使用其他包中的类,则需要使用import关键字导入。
例如:导入java.util.Scanner;
如果需要使用某个包的多个类,可以使用"*"来替换所有类
示例:导入java.util.*;
套餐摘要
将功能相似的类放在同一个包中,以便于查找和使用。
由于同名的类可以存在于不同的包中,因此使用包可以在一定程度上避免命名冲突。
【Java核心概念解析:方法重写与重载、final关键字、多态性、单例设计模式、抽象类与接口、访问控制及包管理】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
终于到Java基础五了!感觉越来越接近理解这个语言的核心概念了。
有14位网友表示赞同!
重载、多态这些东西一直有点印象模糊,这篇文章应该能让我理清思路!
有17位网友表示赞同!
final关键字真是个很用处的工具,以后要用得更多~
有20位网友表示赞同!
学习单例模式感觉很有挑战性,希望能理解这个模式是如何保证只创建一份实例的。
有5位网友表示赞同!
抽象类和接口都是用来描述代码结构的核心概念,这篇文章应该能让我更清晰地认识到他们的作用。
有14位网友表示赞同!
权限修饰符是Java中非常重要的概念,一定要掌握这些关键词!
有15位网友表示赞同!
包的概念一直不太明白,希望这篇帖子可以解释清楚,方便我更好的组织代码!
有12位网友表示赞同!
终于有机会深入学习一下Java高级的那些概念了!
有11位网友表示赞同!
希望能详细讲解重写和重载的区别,还有多态的多种实现方式。
有10位网友表示赞同!
单例模式应用场景很多,这篇帖子能让我更好地理解它的实战意义。
有11位网友表示赞同!
抽象类和接口之间的区别一直令我困惑,希望这篇文章能够帮我弄明白。
有20位网友表示赞同!
Java 的包管理机制太重要了!一定要好好学习!
有7位网友表示赞同!
多态让我感觉这个语言非常灵活,期待深入学习它的应用技巧.
有11位网友表示赞同!
final关键字的使用场景真的很多,“只读”的特点让人感觉很有用。
有9位网友表示赞同!
这段时间一直在练习Java,希望这篇帖子能够帮我巩固基础知识!
有19位网友表示赞同!
学习了这些高级概念,我就能写出更优雅、更高效的Java代码!
有15位网友表示赞同!
感谢分享这么宝贵的Java学习资源!让我可以尽快掌握这些核心概念。
有14位网友表示赞同!
感觉自己离成为一名合格的java程序员越来越近啦!
有6位网友表示赞同!
这些基础知识可是学习更高级Java架构的基础!一定要牢记
有7位网友表示赞同!