1.接口中定义成员变量
接口中可以定义成员变量,但必须用public static final 关键字修饰,从效果上来看,就相当于是一个常量。
2.注意事项:
①接口中的常量,用public static final来修饰,是可以省略这三个关键字。
②相当于是常量,因此只能初始化的生活进行赋值,后面不能更改。
③建议命名格式用大写字母加下划线。
2.1错误写法:
①接口中没有静态代码块和构造方法。
②接口中不能有构造方法。
3. 接口多实现与多继承
3.1.一个类的直接父类只有一个,但是一个类可以实现多个接口
3.2.如果实现类所实现的多个接口中存在重复的抽象方法,那么只需要覆盖重写一次即可
3.3.如果实现类没有覆盖重写所有借口当中的所有抽象方法能不能实现类必须是一个抽象类。
3.4.如果实现类所实现的多个接口中存在重复的默认方法,那么实现类一定要对默认方法进行覆盖重写。
3.5.一个类如果直接父类当中的方法和接口当中的默认方法产生了冲突,优先使用父类中的方法
4.接口的四种权限修饰符。
代码及其程序运行结果。
package demo01;
public interface MyInterfaceConst{
int num=5;
public static final int NUM_OF_CLASS=5;
}
package demo01;
public class Demo01Interface{
int num=5;
public void method(){
}
}
package demo02;
public class Fu {
public void method() {
System.out.println("我是父类方法");
}
}
package demo02;
public interface MyInterface {
public default void method() {
System.out.println("我是接口里的默认方法");
}
}
package demo02;
public interface MyInterfaceA{
public abstract void methodA();
public abstract void methodAbs();
public default void methodDefault(){
System.out.println("默认方法AAA");
}
}
package demo02;
public abstract class MyInterfaceAbs implements MyInterfaceA,MyInterfaceB{
public void methodB() {
}
public void methodAbs() {
}
public void methodDefault() {
MyInterfaceA.super.methodDefault();
}
}
package demo02;
public interface MyInterfaceB{
public abstract void methodB();
public abstract void methodAbs();
public default void methodDefault(){
System.out.println("默认方法BBB");
}
}
package demo02;
public class MyInterfaceImpl implements MyInterfaceA,MyInterfaceB{
public void methodA() {
}
public void methodB() {
}
public void methodAbs() {
}
public void methodDefault() {
MyInterfaceA.super.methodDefault();
}
}
package demo02;
public class Zi extends Fu implements MyInterface{
}
package demo02;
public class Demo02Interface {
public static void main(String[] args){
Zi zi=new Zi();
zi.method();
}
}
package demo03;
public interface MyInterface extends MyInterfaceA,MyInterfaceB{
public abstract void method();
default void methodDefault() {
MyInterfaceA.super.methodDefault();
}
}
package demo03;
public interface MyInterfaceA {
public abstract void methodA();
public abstract void methodAbs();
public default void methodDefault(){
System.out.println("默认方法AAA");
}
}
package demo03;
public interface MyInterfaceB {
public abstract void methodB();
public abstract void methodCommon();
public default void methodDefault(){
System.out.println("默认方法BBB");
}
}
package demo03;
public class MyInterfaceImpl implements MyInterface{
@Override
public void methodA() {
// TODO 自动生成的方法存根
}
@Override
public void methodAbs() {
// TODO 自动生成的方法存根
}
@Override
public void methodB() {
// TODO 自动生成的方法存根
}
@Override
public void methodCommon() {
// TODO 自动生成的方法存根
}
@Override
public void method() {
// TODO 自动生成的方法存根
}
}
package demo03;
public class Demo03Relations {
}
package demo04;
public class MyAnother {
public void anothoerMethode() {
MyClass myclass=new MyClass();
}
}
package demo04;
public class MyClass { private int num=5;
public void method() { System.out.println(num); }
int sum=num+1;}
package demo04;
public class MySon1 extends MyClass{
public void method() {
}
}
package demo04;
public class Demo04Main {
}
package demo05;
import demo04.MyClass;
public class MySon2 extends MyClass{
public void method() {
}
}
package demo05;
import demo04.MyClass;
public class MyStranger {
public void methodStranger() {
MyClass myclass=new MyClass();
}
}