本节内容开发中用的不多,仅仅学习语法知识
interface:接口
接口中的成员:JDK 1.8之前只有常量 和 抽象方法
常量 :public static final String name; public static final 可以省略不写,接口默认会为你加上! public static final String SCHOOL_NAME = "黑马";/Sting name="黑马"
抽象方法:public abstract void eat();
public abstract也是可以省略的
(类中全是抽象方法,特称为接口,不全是抽象方法就是抽象类,接口就是抽象类的特殊实例)
接口不能创建对象
什么是接口
接口是一种规范(约束别人做事),规范一定是公开的。
接口的基本使用(与类的关系):被实现
接口可以多实现(一个实现类,实现多个接口)
接口使用的注意事项
接口与接口的关系:多继承
类与类:单继承
类和接口:多实现
接口与接口:多继承、一个接口可以同时继承多个接口。 (一个接口可以同时继承多个几口)
这样可以让代码简洁。
JDK8之后接口新增方法
诞生背景:
以前的话,我们项目上线后,如果要发行新版本,增加接口的内容,那么我们在接口上写了新方法后,所有的实现类都要重写!非常麻烦!牵一发而动全身
后来直接把功能在接口内定义完成。
第一种:默认方法
(接口没有对象,所以用的是实现类的对象调用)
第二种:静态方法
(用接口名调用,实现类名不能调用)
第三种:私有方法
意思就是,在类中的其他方法调用这个私有方法,这样调用其他方法的时候私有方法就被调用了。
在default中调用pravite
使用接口的注意事项
补充:
2、原因是接口的静态方法不能由实现类调用,只能接口自己调用。
3、class Cat extends Animal implements Food{}先继承后实现接口。
4、直接干掉两个干爹的方法,自己重写新的方法。
包的基本知识
1、同一个包下的类,可以直接互相访问
2、不同包下的类,先导包
3、假如一个类中需要用到不同类,而这个两个类的名称是一样的,那么默认只能导入一个类,另一个类要带包名访问。(比如,你往测试类里导入了两个studen类,类名都一样。但是第一个student可以使用默认的student。但是第二个就必须是包名加类名的全写)
权限修饰符
自己定义成员满足如下:
成员变量私有
方法公开
#
final
注意:区分方法的重载与重写
重载:同一个类中,出现多个方法名称相同,但形参列表不同,那么这些方法就是重载方法。
重写:在继承体系中,子类出现了和父类中一模一样的方法声明,我们就称子类这个方法是重写的方法。
常量
常量是使用了public static final修饰的成员变量,必须具有初始化值,而且执行过程中其值不能改变。
常量的作用及好处:可以用于做系的配置信息,方便程序的维护,同时提高可读性。
抽象类
抽象类的使用场景
抽象类的特点、注意事项
-
类有的成员变量、方法、构造器,抽象类也都有
-
抽象类中,可以没有抽象方法,但有抽象方法的,一定是抽象类。
-
一个类继承了抽象类,必须重写完抽象类的所有抽象方法,,否则这个类也要定义成抽象类
-
不能用abstract修饰变量、代码块、构造器。
最重要特征:得到抽象方法,失去了创建对象的能力
final与abstract的关系
互斥关系
abstract定义的抽象类作为模板让子类继承,final定义的类不能被继承
抽象方法定义通用功能让子类重写,final定义方法子类不能重写。
使用场景
做信息标志和分类(比用常量好用!)
枚举:代码可读性好,入参约束严谨,代码优雅,是最好的信息分类技术!建议使用!