面向对象——接口类
接口的基础语法
[修饰符列表] interface 接口名{
}
1.接口也是一种引用数据类型
2.借口是完全抽象的
3.接口支持多继承,一个接口可以继承多个接口
接口中只包含两部分内容,常量和抽象方法
4.接口中所有元素都是public修饰的
5.接口中的抽象方法定义时:public abstract修饰符可以省略
6.接口中的方法都是抽象方法,所以接口中的方法不能有方法体。
7.接口中常量的public static final 可以省略
8.一个非抽象类实现接口的时候,必须将接口中的方法加以实现
9.一个类可以实现多个接口
10.extends 和 implements 可以共存,extends 在前,implements 在后
11.使用接口,写代码的时候,可以使用多态(父类型引用指向子类型对象)
//Figure.java文件
package com.shouyerenst;
public interface Figure { ①
//接口中静态成员变量
String name = "几何图形";//省略public static final ②
// 绘制几何图形方法
void onDraw(); //省略public ③
}
代码第①行是声明Figure接口,声明接口使用interface关键字,interface前面的修 饰符是public或省略。public是公有访问级别,可以在任何地方访问。省略是默认访问级别,只能在当前包中访问。代码第②行声明接口中的成员变量,在接口中成员变量都静态成员变量,即省略了public static final修饰符。代码第③行是声明抽象方法,即省略了public关键字。
某个类实现接口时,要在声明时使用implements关键字,当实现多个接口之间用逗号(,)分隔。实现 接口时要实现接口中声明的所有方法。
实现接口Figure示例代码如下:
//Ellipse.java文件
package com.shouyerenst.imp;
import com.shouyerenst.Figure;
//几何图形椭圆形
public class Ellipse implements Figure {
//绘制几何图形方法
@Override
public void onDraw() {
System.out.println("绘制椭圆形...");
}
}
//Triangle.java文件
package com.shouyerenst.imp;
import com.shouyerenst.Figure;
//几何图形三角形
public class Triangle implements Figure {
// 绘制几何图形方法
@Override
public void onDraw() { System.out.println("绘制三角形...");
}
}
注意 接口与抽象类一样都不能被实例化。
接口在开发中的作用
接口在开发中的作用,类似于多态在开发中的作用。降低程序的耦合度,提高程序的扩展性。
面向接口编程,可以降低程序的耦合度,提高程序扩展力。符合ocp开发原则。接口的使用离不开多态机制
一个经典案例
顾客通过菜单点菜,厨师实现菜单内容。
菜单接口
package com.shouyerenst.OCP;
//菜单接口
public interface Menu {
//西红柿炒鸡蛋
void ScrambledEggsWithTomatoes();
//鱼香肉丝
void ShreddedFishAndMeat();
}
中餐厨师类
package com.shouyerenst.OCP;
//中餐厨师
public class ChineseChef implements Menu{
//西红柿炒鸡蛋
public void ScrambledEggsWithTomatoes(){
System.out.println("中餐厨师做的西红柿炒鸡蛋!!!");
}
//鱼香肉丝
public void ShreddedFishAndMeat() {
System.out.println("中餐厨师做的鱼香肉丝!!!");
}
}
西餐厨师类
package com.shouyerenst.OCP;
//西餐厨师
public class WesternChef implements Menu{
//西红柿炒鸡蛋
public void ScrambledEggsWithTomatoes(){
System.out.println("西餐厨师做的西红柿炒鸡蛋!!!");
}
//鱼香肉丝
public void ShreddedFishAndMeat() {
System.out.println("西餐厨师做的鱼香肉丝!!!");
}
}
顾客类
package com.shouyerenst.OCP;
//顾客
public class Customer {
private Menu menu;
//构造方法
public Customer() {
}
public Customer(Menu menu) {
this.menu = menu;
}
//get、set方法
public Menu getMenu() {
return menu;
}
public void setMenu(Menu menu) {
this.menu = menu;
}
public void order(){//点菜方法
//Menu m = this.getMenu();
menu.ScrambledEggsWithTomatoes();
menu.ShreddedFishAndMeat();
}
}
测试类
package com.shouyerenst.OCP;
public class Test {
public static void main(String[] args) {
//创建厨师对象
Menu cook1 = new ChineseChef();
//创建顾客对象
Customer customer = new Customer(cook1);
//顾客点菜
customer.order();
}
}
抽象类与接口区别
归纳抽象类与接口区别如下:
-
接口支持多继承,而抽象类(包括具体类)只能继承一个父类。
-
接口中不能有实例成员变量,接口所声明的成员变量全部是静态常量,即便是变量不加 public static final 修饰符也是静态常量。抽象类与普通类一样各种形式的成员变量都可以声明。
-
接口中没有包含构造方法,由于没有实例成员变量,也就不需要构造方法了。抽象类中可以有实例成员变量,也需要构造方法。
-
抽象类中可以声明抽象方法和具体方法。Java 8之前接口中只有抽象方法,而Java 8之后接口中也可以声明具体方法,具体方法通过声明默认方法实现。
感觉不错的话,动手点个赞吧!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/125487.html