java面向对象 4
一、 接口的基础知识
1、为什么需要接口
为解决实际应用中,单一继承无法解决的问题
2、什么是接口
a) 基本概念?
接口是一种特殊的抽象类
接口是一种规范和标准,可以约束类的行为,是一些方法特征集合,但方法没有方法体
b) 基本语法
访问修饰符 interface 接口名{
//定义 方法(没有方法体),方法的访问修饰符默认为public
//定义 属性(默认是公共的静态的常量)
数据类型 常量名=值;
}
访问修饰符只能为public和默认的
c) 注意事项?
1.接口命名,接口字必须和文件名相同
2.接口中的方法没有方法体
3.接口中的属性名必须大写,且要赋值
4.接口不能实例化,没有构造方法
5.接口支持多重继承,一个接口可以继承多个接口,但不能继承类
6.接口中的方法,必须被所有实现接口的类具体实现
3、一个类如何实现接口
class 类名 implements 接口名{
//必须对接口中的方法,具体实现
}
4、一个类如何继承另外一个类,且同时实现一个接口【变相的让1个类实现多重继承】
class 子类名 extends 父类名 implements 接口1,…接口n{
}
5、接口的好处?
接口体现了约定和实现相分离的原则
弥补了Java类单一继承的不足,有利于代码的扩展和维护
6、 抽象类和接口的异同点?【常见笔试题】
相同点
- 1. 二者都不可以实例化
- 2. 二者都包含抽象方法,必须被非抽象的子类重写或实现
- 3. 二者都可以用来实现多态
不同点:
1、 抽象类只能单一继承,而接口可以支持多重继承
2、 抽象类中除抽象方法外,还可以有非抽象的方法;接口中的方法只能是抽象方法
3、 抽象类可以有构造方法,接口没有
4、 抽象类中的变量可以不赋值,接口中的变量必须赋值
5、 抽象类中可以定义静态方法,接口不可以
二、 面向接口编程
1、接口表示一种能力
2、接口表示一种约定
3、面向接口编程的好处?
a) 实现接口和实现的分离
b) 可以降低代码间的耦合性
c) 提高程序的可扩展性和可维护性
1 public abstract class Handest { 2 private String brand; //品牌 3 private String type; //型号 4 5 public String getBrand() { 6 return brand; 7 } 8 9 public Handest(String brand,String type) { //有参构造方法 10 this.brand = brand; 11 this.type=type; 12 } 13 14 public String getType() { 15 return type; 16 } 17 18 19 public abstract void print(); 20 public abstract void function(); 21 }
public interface Network { void surf(); //上网 }
//接口2 public interface PlayWiring { void play(); //播放功能 }
//接口3 public interface TakePictures { void takePictures(); //拍照 }
//接口4 public interface VideoCall { void visualTelephone(); //视频电话 }
1 public class AptitudeHandset extends Handest implements PlayWiring,Network,TakePictures,VideoCall { 2 3 public AptitudeHandset(String brand, String type) { 4 super(brand, type); 5 6 } 7 8 @Override 9 public void visualTelephone() { 10 11 System.out.println("开始视频通话......"); 12 } 13 14 @Override 15 public void takePictures() { 16 17 System.out.println("咔嚓......拍照成功"); 18 } 19 20 @Override 21 public void surf() { 22 23 System.out.println("已启动移动网络......"); 24 } 25 26 @Override 27 public void play() { 28 29 System.out.println("开始播放视频《小时代》......"); 30 } 31 32 @Override 33 public void print() { 34 35 System.out.println("这是一款型号为"+super.getType()+"的"+super.getBrand()+"手机:"); 36 } 37 38 @Override 39 public void function() { 40 41 System.out.println("发送带图片与文字的信息......"); 42 } 43 44 }
1 public static void main(String [] args){ 2 3 AptitudeHandset a=new AptitudeHandset("I9100","HTC"); 4 a.print(); 5 a.surf(); 6 a.play(); 7 a.takePictures(); 8 a.function(); 9 a.visualTelephone(); 10 }