DAY7
一、抽象类
定义:就是一些行为在父类中不能给出具体的实现,而是仅仅声明出来,这个只有方法声明而没有方法体的方法叫做抽象方法,如果一个类中有了抽象方法,那么这个类就必须定义为抽象类
定义格式:
抽象类特点:
- 抽象类中不一定有抽象方法,有抽象方法的类一定是一个抽象类;
- 如何初始化一个抽象类?如何使用抽象类里面的抽象方法了?
父类不能做的事情,可以交给子类实现,这也是多态的一种体现,抽象类的多态 - 抽象类的子类要么是抽象类,要么实现所有的抽象方法;
抽象类成员的特点:
- 成员变量:可以是变量,也可以是常量;
- 构造方法:是有构造方法的,用于子类初始化父类成员
- 成员方法:可以是具体的方法,也可以是抽象的方法,一般用于约束子类必须要实现的功能(如:参数等)
案例讲解:
具体事物:讲课
共性:姓名、年龄、讲课
通过分析,发现讲课这个行为在老师类中不应该给出具体的实现,因为每个老师讲什么课,应该是由具体的老师进行实现的
接口:
定义:接口一般是用于做扩展功能的,哪一个类想实现某种功能,实现对应的接口即可,接口里面的方法也是抽象的
定义格式:
接口的成员特点: - 成员变量
接口里面只能是常量,而且前面所有默认修饰符:public static final - 构造方法
没有构造方法,因为接口里面没有具体的方法,而且常量也可以直接通过接口名调用,要对象没有作用 - 成员方法
只能有抽象方法,默认修饰符:public abstract
如何使用接口里面的抽象方法了?
可以让一个子类实现这个接口,然后再实现里面的抽象方法,然后创建该子类的对象,这个也叫做接口多态
子类如何实现接口了?
接口子类的特点: - 要么是抽象类,要么实现接口里面所有的抽象方法
类和接口以及彼此之间的关系: - 类与类
继承关系,只能单继承,不能多继承,但可以多层继承 - 类和接口
实现关系:单实现,多实现,多层实现,还可以在继承一个类的同时实现多个接口 - 接口与接口
继承关系:可以单继承,可以多继承,还可以多层继承
抽象类和接口: - 成员区别
- 成员变量
抽象类:可以是常量,也可以是变量
接口:只能是常量,默认修饰符:public static final - 构造方法
抽象类:有,因为抽象类里面有具体的实现,子类可能会使用抽象类里面的成员
接口:没有,因为里面没有具体的实现,唯一的一个常量还可以通过接口名调用,所以要对象没有意义 - 成员方法
抽象类:可以是抽象的,也可以是具体的
就扣:只能是抽象的,默认修饰符:public abstract - 抽象类和接口的关系
抽象类:可以继承一个类的同时,实现多个接口,类和类之间是继承的关系
接口:可以是单继承,多继承,多层继承,类和接口是实现关系 - 设计理念的区别:
抽象类:一般是做共性的封装,要求子类必须实现
接口:一般是做扩展性的封装,是额外功能,子类想要具有某种功能,实现对应的接口
包:
包:就是一个文件夹
包的作用:就是用于管理不同文件的
包的划分:不同的包装不同的类
包的定义:
包定义的注意事项: - 定义包使用package,定义包的代码必须放在可执行代码的第一行
- 一个源文件中只能出现一个package关键字定义包的语句
- 如果没有出现package关键字,就代表这个类没有包名
带包的类的编译和运行: - 手动
- 使用javac进行编译源文件
- 手动建立对应包的文件夹
- 将编译好的类文件剪切到对应的文件夹中
- 使用java命令进行编译:java 路劲名.包含main方法类名
- 自动
- 使用javac -d . 源文件名.java
- 使用java 路劲名.类名
二、权限修饰符
详细解释: - public:什么地方都可以访问;
- protected:只要是子类都可以访问;
- 默认:只要在同一个包中;
- private:只能在同一个类中访问;
一个类被public修饰的注意事项: - 一般情况下一个包含main方法的类都会定义成public,访问权限足够大;
- 源文件名需要和当前源文件中被public修饰的类名保持一致;
- 一个源文件中只能出现一个被public修饰的类