package 包
什么是包?
其实包的本质就是文件夹,用来管理文件
建包语法格式:package 公司域名倒写.技术名称。包名建议全部小写,且具备意义
导包
相同包下的类可以直接访问,不同包下的类必须导包,才可以使用!
导包格式:Import 包名.类名;
假如一个类中需要用到不同的类,而这两个类的名称一样的,那么默认只能导入一个类,另一个类要带包名访问。
抽象方法
当我们将共性的方法,抽取到父类之后,发现这个方法无法在父类中给出具体明确,而这个方法还是子类必须要有的方法,就可以设置为抽象方法
抽象方法定义格式:抽象方法得存活在抽象类中,父类的抽象方法子类必须重写该抽象方法
抽象方法: public abstract 返回值类型 方法名(参数列表);
抽象类:public abstract class 类名{}
注意事项:1,抽象类不能实例化
——如果抽象类可以实例化那么就能够调用该类中没有方法体的抽象方法了
2,抽象类存在构造方法
——交给子类,通过super()进行访问
3,抽象类中可以存在普通方法
——可以让子类继承到继续使用
4,抽象类的子类
1).要么重写抽象类中的所有方法
2).要么是抽象类
abstract关键字冲突
final:被abstract修饰的方法,强制要求子类重写,被final修饰的方法,子类不能重写
private:被abstract修饰的方法,强制要求子类重写,被private修饰的方法,子类不能重写
sitatic :被siataic修饰的方法可以直接被类调用,抽象方法没有逻辑,调用没有意义
接口介绍interface
接口:体现的思想是对规则的声明
Java的接口更多的体现是对行为的抽象。
思想:如果发现一个类,所有的组成都是抽象的方法
——没有成员变量(可以有常量)
——没有普通方法
这种类我们通常会设计为Java中的接口,因为现在这个类存在的价值就只剩声明规则
接口的定义格式:
interface 接口名{}
注意:
接口不允许实例化
接口和类之间是实现关系,使用implements关键字来完成
class 类名 implements 接口名 {}
实现类(接口的子类):
1,重写所有抽象方法
2,将实现类变成抽象类
接口的成员特点:
1,成员变量:只能定义常量,因为系统会直接定义关键字:public static final
2,成员方法:只能是抽象方法,因为系统会自动添加两个关键字:public abstract
3,构造方法:没有
接口和类之间的各种关系:
1,类和类之间:继承关系,只支持 基础包 java单继承,不支持多继承,但是可以多层继承
2,类与接口的关系:实现关系,可以单实现,也可以多实现,甚至可以在继承一个类的同时,实现多个接口
3,接口与接口之间的关系:继承关系,可以单继承,也可以多继承
抽象类:对事物做抽象(描述事物)
接口:对行为抽象(制定规则)
JDK8版本接口新特性:
允许在接口中定义非抽象方法,但是需要使用default修饰,这些方法就是默认方法
作用:解决接口升级的问题
接口中默认方法的定义格式:
格式:public default 返回值类型 方法名(参数列表){}
范例:public default void method(){}
一:允许定义非抽象方法
注意事项:
1,public 可以省略,但是default不能省略
2,默认方法,实现类是允许重写的,但是需要去掉default关键字
3,如果实现了多个接口,多个接口中存在相同的默认方法,实现类必须重写默认方法
二:允许定义静态方法
——理解:既然接口允许方法带方法体了,干脆开放静态方法,可以类名调用更加方便
注意事项:
1,public可以省略,但是static不能省略
2,接口中的静态方法,只允许接口名进行调用,不允许实现类对象调用
JDK9版本接口新特性:
接口中允许定义私有private方法
当我们在接口方法中有需要使用重复的行为时,但又不想别类调用该方法,就可以设置一个私有方法提升复用性,减少冗余代码。
多态 :同一个行为具有多个不同的表现形式或形态的能力
多态的前提:
1,有继承或者实现的关系
2,有方法的重写
3,有父类应用指向子类对象
一,对象多态
好处:方法的形参定义为父类类型,这个方法就可以接收到该父类的任意子类对象
二,行为多态
好处:同一个方法,具有多种不同表现形式,或形态的能力
多态成员访问特点:
1,成员变量:编译看左边(父类),成员看左边(父类)
2,成员方法:编译看左边(父类),方法看右边(子类)
在编译的时候,会检查父类中有没有这个方法
没有:编译报错
有:编译通过,但在运行时一定会执行子类的方法逻辑
原因:担心你调用的方法,在父类中是一个抽象方法(抽象方法没有意义)
多态创建对象,调用静态成员:
静态的成员,推荐类名进行调用
细节:静态的成员,可以使用对象名调用,但这是一种假象
——生成字节码文件后,会自动转换为类名调用
问题:
1,创建对象的时候,左右两边类型可以不一致,是所有对象都可以这样创建吗?
答:不是所有类都可以这么创建,前提是父类引用指向子类对象,接口的引用指向实现对象
2,为什么调用的方法是同一套方法,但是却有不同的表现形式 ?
答:因为在用多态的形式创建对象的时候,编译检查父类,但是运行检查子类,避免父类是抽象方法调用没有意义
多态的好处:
多态的好处可以提高程序的拓展性
对象多态:将方法形参定义为父类类型,这个方法可以接受该父类的任意子类对象
行为多态:同一个行为具有不同的表现形式或形态的能力
多态的弊端:
不能调用子类特有的成员
多态的转型:
向上转型
从子到父(父类引用指向子类对象)
Father f=new Son();
向下转型
从父到子(将父类引用所指向的对象,转交给子类类型)
Son s=(Son)f;//必须强制转换
多态的转型问题:
如果被转的引用类型变量,对应的实际类型和目标类型不是一种类型,那么在转换的时候就会出现ClassCastException(转换类型不一致)
那么使用关键字instanceof来判断两个类型是否为同一个类型来避免出现类型不一致错误
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/4406.html