java面向对象第四章
一、 接口的基础知识
1、为什么需要接口
为解决实际应用中,单一继承无法解决的问题
2、什么是接口
a) 基本概念?
接口是一种特殊的抽象类
接口是一种规范和标准,可以约束类的行为,是一些方法特征集合,但方法没有方法体
b) 基本语法
访问修饰符 interface 接口名{
//定义 方法(没有方法体),方法的访问修饰符默认为public
//定义 属性(默认是公共的静态的常量)
数据类型 常量名=值;
}
访问修饰符只能为public和默认的
c) 注意事项?
1.接口命名,接口字必须和文件名相同
2.接口中的方法没有方法体
3.接口中的属性名必须大写,且要赋值
4.接口不能实例化,没有构造方法
5.接口支持多重继承,一个接口可以继承多个接口,但不能继承类
6.接口中的方法,必须被所有实现接口的类具体实现
public abstract class Handest { private String brand; //品牌 private String type; //型号 public String getBrand() { return brand; } public Handest(String brand,String type) { //有参构造方法 this.brand = brand; this.type=type; } public String getType() { return type; } public abstract void print(); public abstract void function(); } 父类
public interface Network { void surf(); //上网 }
//接口2 public interface PlayWiring { void play(); //播放功能 }
//接口3 public interface TakePictures { void takePictures(); //拍照 }
//接口4 public interface VideoCall { void visualTelephone(); //视频电话 }
public class AptitudeHandset extends Handest implements PlayWiring,Network,TakePictures,VideoCall { public AptitudeHandset(String brand, String type) { super(brand, type); } @Override public void visualTelephone() { System.out.println("开始视频通话......"); } @Override public void takePictures() { System.out.println("咔嚓......拍照成功"); } @Override public void surf() { System.out.println("已启动移动网络......"); } @Override public void play() { System.out.println("开始播放视频《小时代》......"); } @Override public void print() { System.out.println("这是一款型号为"+super.getType()+"的"+super.getBrand()+"手机:"); } @Override public void function() { System.out.println("发送带图片与文字的信息......"); } } 子类
public static void main(String [] args){ AptitudeHandset a=new AptitudeHandset("I9100","HTC"); a.print(); a.surf(); a.play(); a.takePictures(); a.function(); a.visualTelephone(); } 测试类
3、一个类如何实现接口
class 类名 implements 接口名{
//必须对接口中的方法,具体实现
}
4、一个类如何继承另外一个类,且同时实现一个接口【变相的让1个类实现多重继承】
class 子类名 extends 父类名 implements 接口1,…接口n{
}
5、接口的好处?
接口体现了约定和实现相分离的原则
弥补了Java类单一继承的不足,有利于代码的扩展和维护
6、 抽象类和接口的异同点?【常见笔试题】
相同点
- 1. 二者都不可以实例化
- 2. 二者都包含抽象方法,必须被非抽象的子类重写或实现
- 3. 二者都可以用来实现多态
不同点:
1、 抽象类只能单一继承,而接口可以支持多重继承
2、 抽象类中除抽象方法外,还可以有非抽象的方法;接口中的方法只能是抽象方法
3、 抽象类可以有构造方法,接口没有
4、 抽象类中的变量可以不赋值,接口中的变量必须赋值
5、 抽象类中可以定义静态方法,接口不可以
public abstract class Pet { private String name; private int health; private int love; public Pet(String name,int health,int love){ this.name=name; this.health=health; this.love =love; } public String getName() { return name; } public int getHealth() { return health; } public int getLove() { return love; } public abstract void print(); } 父类
//接口1 public interface Eatable { void eat(); //吃饭 }
//接口2 public interface FlyingCatchable { void catchingFly(); //接飞盘 }
public class Dog1 extends Pet implements Eatable,FlyingCatchable{ public Dog1(String name, int health, int love) { super(name, health, love); // TODO Auto-generated constructor stub } @Override public void print() { // TODO Auto-generated method stub System.out.println("我叫"+super.getName()+",健康值是:"+super.getHealth()+",与主人的亲密度为:"+super.getLove()+"。"); } @Override public void catchingFly() { // TODO Auto-generated method stub System.out.println("我正在和主人玩飞盘!"); } @Override public void eat() { // TODO Auto-generated method stub System.out.println("我正在吃饭!"); } } 子类
public class PetText { public static void main(String [] args){ Dog1 d=new Dog1("好好",90 ,95); d.print(); d.eat(); d.catchingFly(); }
二、 面向接口编程
1、接口表示一种能力
2、接口表示一种约定
3、面向接口编程的好处?
a) 实现接口和实现的分离
b) 可以降低代码间的耦合性
c) 提高程序的可扩展性和可维护性