接口
从java8开始,接口中允许定义默认方法
备注:接口中的默认方法可以解决接口升级的问题
默认方法的格式:
public default 返回值类型方法名称(参数列表){
//方法体
}
注意:
1.接口的默认方法,可以通过接口实现类对象直接调用
2.接口的默认方法,也可以在接口的实现类中进行覆盖重写
接口中的常量
格式:
public static final 数据类型 常量名称=数据值;
注意事项:
1.接口中的常量,可以省略public static final,注意,不写也认为是常量
2.接口中的常量,必须进行赋值
3.接口中的常量名称,使用完全大写的字母,多个单词用下划线连接
接口与抽象类:
相同点:
1.都包含抽象方法
2.都代表系统的抽象层,都不能被实例化
3.用于描述系统的服务,不必提供具体的实现
不同点:
一个类只能继承一个直接父类,但是可以实现多个接口
抽象类更多的用于代码的复用,接口便于代码维护
多用接口,少用继承
/**
*接口
*/
public interface Camera {
/**
* 拍照
*/
public void photo();
/**
* 录像
*/
public void video();
}
/**
* 抽象门类
*/
public abstract class Door {
//开门
public abstract void open();
//关门
public abstract void close();
}
public class FDoor extends Door implements Lock,Camera{
@Override
public void open() {
System.out.println("开门");
}
@Override
public void close() {
System.out.println("关门");
}
@Override
public void lock() {
System.out.println("加锁");
}
@Override
public void unLock() {
System.out.println("开锁");
}
@Override
public void photo() {
System.out.println("上锁后拍摄照片2张");
}
@Override
public void video() {
System.out.println("保持录像,默认录像30分钟清除一次");
}
@Override
public void test() {
System.out.println("实现类重写");
}
}
注意事项:
1.接口中的抽象方法,修饰符必须是两个固定的关键字:public abstract
2.这两个关键字修饰符,可以选择性省略
java中四种权限访问修饰符
public | protected | default(默认的)【可以不写】 | private | |
---|---|---|---|---|
同一个类中 | yes | yes | yes | yes |
同包子类 | yes | yes | yes | no |
同包非子类 | yes | yes | yes | no |
不同包子类 | yes | yes | no | no |
不同包非子类 | yes | no | no | no |
方法的访问与类的访问规则相同!