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. 1.  二者都不可以实例化
  2. 2.  二者都包含抽象方法,必须被非抽象的子类重写或实现
  3. 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     }
测试类
原文地址:https://www.cnblogs.com/alhy/p/7017541.html