英国做暧小视频网站,seo网站快速排名软件,厦门工商网站查询企业信息,专做兼职的网站个人简介 #x1f440;个人主页#xff1a; 前端杂货铺 ⚡开源项目#xff1a; rich-vue3 #xff08;基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL#xff09; #x1f64b;♂️学习方向#xff1a; 主攻前端方向#xff0c;正逐渐往全干发展 #x1…个人简介 个人主页 前端杂货铺 ⚡开源项目 rich-vue3 基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL ♂️学习方向 主攻前端方向正逐渐往全干发展 个人状态 研发工程师现效力于中国工业软件事业 人生格言 积跬步至千里积小流成江海 推荐学习开源 rich-vue3 前端面试宝典 Vue2 Vue3 Vue2/3项目实战 Node.js实战 Three.js 个人推广每篇文章最下方都有加入方式旨在交流学习资源分享快加入进来吧 内容参考链接Java基础一Hello World8种数据类型键盘录入Java基础二数组方法方法重载Java基础三类和对象、构造方法Java基础四字符串、StringBuffer、StringBuilder、StringJoinerJava基础五ArrayListJava基础六继承Java基础七多态Java基础八包、final、权限修饰符、静态代码块Java基础九抽象类、抽象方法 文章目录 前言接口的定义和使用接口中成员的特点接口和类之间的关系接口中新增的方法默认方法静态方法私有方法 总结 前言
大家好这里是前端杂货铺。
本篇文章我们学习 接口。 接口的定义和使用
接口用关键字 interface 来定义
public interface 接口名 {}接口不能被实例化接口和类之间是实现关系通过 implements 关键字表示
public class 类名 implements 接口名 {}接口的子类实现类要么 重写接口中的所有抽象方法要么 是抽象类
注意
接口和类的实现关系可以单实现也可以多实现
public class 类名 implements 接口名1, 接口名2 {}实现类还可以在继承一个类的同时实现多个接口
public class 类名 extends 父类 implements 接口名1, 接口名2 {}下面我们把游泳定义为一个接口实现青蛙和兔子的相关属性和行为的输出 Swim.java
public interface Swim {public abstract void swim();
}Animal.java
public abstract class Animal {private String name;private int age;public Animal() {}public Animal(String name, int age) {this.name name;this.age age;}public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}public void setAge(int age) {this.age age;}public abstract void eat();
}Frog.java
public class Frog extends Animal implements Swim {public Frog() {}public Frog(String name, int age) {super(name, age);}Overridepublic void eat() {System.out.println(青蛙在吃虫子);}Overridepublic void swim() {System.out.println(青蛙在游泳);}
}Rabbit.java
public class Rabbit extends Animal{public Rabbit() {}public Rabbit(String name, int age) {super(name, age);}Overridepublic void eat() {System.out.println(兔子在吃胡萝卜);}
}Test.java
public class Test {public static void main(String[] args) {Frog f new Frog(青蛙, 1);System.out.println(f.getName() , f.getAge());f.eat();f.swim();Rabbit r new Rabbit(兔子, 2);System.out.println(r.getName() , r.getAge());r.eat();}
}接口中成员的特点
成员变量只能是常量默认修饰符public static final。
构造方法没有。
成员方法只能是抽象方法默认修饰符public abstract。
注意事项
JDK7 以前接口中只能定义抽象方法。JDK8接口中可以定义有方法体的方法。JDK9接口中可以定义私有方法。
Inter.java
public interface Inter {int num 20;// 即使不加 public abstract也会默认加上的public abstract void method();
}InterImpl.java
public class InterImpl implements Inter {Overridepublic void method() {System.out.println(重写的抽象方法);}
}Test.java
public class Test {public static void main(String[] args) {System.out.println(Inter.num);InterImpl i new InterImpl();i.method();}
}接口和类之间的关系
类与类的关系继承关系只能单继承不能多继承但是可以多层继承。
类与接口的关系实现关系可以单实现也可以多实现还可以在继承一个类的同时实现多个接口。
接口和接口的关系可以单继承也可以多继承。
下面我们实现一下接口的多继承
Inter1.java
public interface Inter1 {public abstract void method1();
}Inter2.java
public interface Inter2 {public abstract void method2();
}Inter3.java
public interface Inter3 extends Inter1, Inter2 {public abstract void method3();
}InterImpl.java
public class InterImpl implements Inter3 {Overridepublic void method1() {}Overridepublic void method2() {}Overridepublic void method3() {}
}接口中新增的方法
默认方法
允许在接口中定义默认方法需要使用关键字 default 修饰。——作用解决接口升级问题。
接口中 默认方法 的定义格式
格式public default 返回值类型 方法名(参数列表) {}范例public default void show() {}
接口中默认方法的 注意事项
默认方法不是抽象方法所以不强制被重写。但是如果被重写重写的时候去掉 default 关键字。public 可以省略default 不能省略如果实现了多个接口多个接口中存在相同名字的默认方法子类就必须对该方法进行重写
接口中编写默认方法
InterA.java
public interface InterA {// 抽象方法public abstract void method();// 默认方法public default void show() {System.out.println(InterA 接口中的默认方法);}
}InterAImpl.java
public class InterAImpl implements InterA{Overridepublic void method() {System.out.println(实现类重写的抽象方法);}
}Test.java
public class Test {public static void main(String[] args) {InterAImpl i new InterAImpl();i.method();i.show();}
}实现了多个接口多个接口中存在相同名字的默认方法子类就必须对该方法进行重写
InterA.java
public interface InterA {// 抽象方法public abstract void method();// 默认方法public default void show() {System.out.println(InterA 接口中的默认方法);}
}InterB.java
public interface InterB {public default void show() {System.out.println(InterB 接口中的默认方法);}
}InterAImpl.java
public class InterAImpl implements InterA, InterB {Overridepublic void method() {System.out.println(实现类重写的抽象方法);}Overridepublic void show() {System.out.println(实现类重写接口中的默认方法);}
}Test.java
public class Test {public static void main(String[] args) {InterAImpl i new InterAImpl();i.method();i.show();}
}PS不重写会报错因为此时不知道调哪个接口的默认方法 静态方法
允许在接口中定义静态方法需要使用关键字 static 修饰。
接口中 静态方法 的定义格式
格式public static 返回值类型 方法名(参数列表) {}范例public static void show() {}
接口中静态方法的 注意事项
静态方法只能通过接口名调用不能通过实现类名或者对象名调用。public 可以省略static 不能省略。
Inter.java
public interface Inter {public abstract void method();public static void show() {System.out.println(Inter 接口中的静态方法);}
}InterImpl.java
public class InterImpl implements Inter{Overridepublic void method() {System.out.println(InterImpl 重写的抽象方法);}public static void show() {System.out.println(InterImpl 实现类中的 show 方法);}
}Test.java
public class Test {public static void main(String[] args) {// 调用接口中的静态方法Inter.show();// 调用实现类中的静态方法InterImpl.show();}
}私有方法
接口中私有方法的定义格式
范例1private void show() {}范例2private static void method() {}
Inter.java
public interface Inter {public static void show1() {System.out.println(show1 方法);show3();}public static void show2() {System.out.println(show2 方法);show3();}private static void show3() {System.out.println(仅允许此java文件里的静态方法调我 --- haha);}
}Test.java
public class Test {public static void main(String[] args) {Inter.show1();Inter.show2();}
}总结
本篇文章我们学习了接口的定义、特点及相关使用是不是收获满满呢
好啦本篇文章到这里就要和大家说再见啦祝你这篇文章阅读愉快你下篇文章的阅读愉快留着我下篇文章再祝 参考资料 Java 基础bilibili-黑马程序员菜鸟教程–Java