JAVA学习十二:接口(interface)

来源:互联网 发布:其他设备 网络控制器 编辑:程序博客网 时间:2024/05/22 17:11

Java面向对象——接口

 

interface关键字:用于定义接口;

implements关键字:用于实现接口;

 

接口:是不可以创建对象的,因为接口里面全是抽象方法,需要被子类实现,子类对接口中的抽象方法全部都要覆盖后,子类才可以创建对象,否则子类只是一个抽象类。

 

接口的特点:

1、接口是对外暴露的规则;

2、接口是程序的功能扩展;

3、接口可以用来多实现;

4、类与接口之间是实现关系,而且类可以在继承一个类的同时实现多个接口;

5、接口与接口之间可以有继承关系;

 

接口的格式:

interface 接口名{}

 

接口中成员的修饰符是固定的;

成员常量:public static final

成员函数:public abstract void

注:接口中的成员都是用public来标识权限的。

 

接口的出现将“多继承”通过另外一种形式体现出来,即“多实现”。

接口中常见定义:常量,抽象方法。

 

接口:初期可以将其理解为“它是一个特殊的抽象类”。当抽象类中的方法都是抽象的后,那么该类可以通过接口的形式来表示。

 

课堂练习:接口的实例应用:

需求:

       定义一个学生类,学生包括姓名,学号,班级这三个属性,

       打印文理科学生语文,数学,英语这三门基础课程成绩,

       打印体育科学生体育类课程及文化课程成绩。

       但文理科学生在学习基础课程的同时,一部分学生还要补习美术,另一部分学生还要补习法语。

       还有一类学生,即学习基础文化课程,又学习体育课程,还要补习美术和法语。

 

需求分析:

1、父类应有属性:姓名,学号,班级,语文,数学,英语。以及抽象的学习方法。所以父类应该是抽象类。

2、文理科学生类:继承父类的属性,然后复写适合自己的学习方法。

3、学习任务特重类学生:继承父类属性,复写父类中的抽象方法,然后在实现自己特有的补习方法。

 

//抽象一个学生类作为父类,在父类中定义姓名,学号,班级,及语数外三课的学习方法;

abstract class stuends

{

       private String name;             //定义基本属性姓名.

       private String num;                     //定义基本属性学号.

       private String classnum;        //定义基本属性班级.

 

       private int yw;                            //定义基本属性语文成绩.

       private int sx;                       //定义基本属性数学成绩.

       private int yy;                      //定义基本属性英语成绩.

 

/构造函数初始化基本属性。

       stuends(String name,String num,String classnum,int yw,int sx,int yy)              /

       {

              this.name = name;

              this.num = num;

              this.classnum = classnum;

 

              this.yw = yw;

              this.sx = sx;

              this.yy = yy;

       }

 

//打印基本属性及成绩。

       void show()                                                                                                            

       {

              System.out.print("姓名:"+name+"\n"+"学号:"+num+"\n"+"班级:"+classnum+"\n"

                                            +"语文:"+yw+"\n"+"数学:"+sx+"\n"+"英语"+yy+"\n");

       }

 

       abstract void xuexi();     //抽像学习方法。

}

 

 

//建立美术课的接口。

interface bukems

{

       public static final String MS = "补课内容:美术";

       public abstract void msshow();

}

 

 

//建立法语课的接口.

interface bukefy

{

       public static final String FY = "补课内容:法语";

       public abstract void fyshow();

}

 

 

//建立第一类文科类学生类,继承自steunds类。同时复写补习美术。

class WKMsteunds extends stuends              //继承父类stenuds

{

//使用super调用父类的方法初始化自身属性。

       WKMsteunds(String name,String num,String classnum,int yw,int sx,int yy)           

       {

              super(name,num,classnum,yw,sx,yy);

       }

 

       void xuexi()           //复写父类中的抽象方法,复写适合自己的学习方法。

       {

              System.out.println("文课类学生学习美术中。。。");

       }

}

 

 

//建立第二类文科类学生类,继承自steunds类。同时复写补习美术和法语。

//继承父类stenuds,同时实现bukefy接口

class WKMFsteundsTo extends stuends implements bukefy              

{

//使用super调用父类的方法初始化自身属性。

       WKMFsteundsTo(String name,String num,String classnum,int yw,int sx,int yy)             

       {

              super(name,num,classnum,yw,sx,yy);

       }

 

       void xuexi()           //复写父类中的抽象方法,复写适合自己的学习方法。

       {

              System.out.println("文课类学生学习美术中。。。");

       }

 

       public void fyshow()     //复写接口bukefy中的抽象方法,实现适合自己的补课法语方法.

       {

              System.out.println(FY);

       }

 

}

 

 

//建立学习任务超重类学生类,继承自steunds类。同时复写长跑。

//继承父类steunds,同时实现bukems,bukefy两个接口.

class TKsteunds extends stuends implements bukems,bukefy

{

//使用super调用父类的方法初始化自身属性。

       TKsteunds(String name,String num,String classnum,int yw,int sx,int yy)

       {

              super(name,num,classnum,yw,sx,yy);

       }

      

//复写父类中的抽象方法,复写适合自己的学习方法。

       void xuexi()          

       {

              System.out.println("理课类学生长跑中。。。");

       }

 

//复写接口bukems中的抽象方法,实现适合自己的补课美术方法.

       public void msshow()

       {

              System.out.println(MS);

       }

 

//复写接口bukefy中的抽象方法,实现适合自己的补课法语方法.

       public void fyshow()                  

       {

              System.out.println(FY);

       }

}

 

class InterfaceDemo

{

       public static void main(String[] args)

       {

              WKMsteunds wk1 = new WKMsteunds("张三","初三001","初三五班",85,85,85);

              WKMFsteundsTo wk2 = new WKMFsteundsTo("王五","初三002","初三六班",90,90,90);

              TKsteunds tk = new TKsteunds("周二","初三003","初三四班",100,100,100);

 

              wk1.show();

              wk1.xuexi();

 

              wk2.show();

              wk2.xuexi();

              wk2.fyshow();

 

              tk.show();

              tk.xuexi();

              tk.msshow();

              tk.fyshow();

       }

}

 

 

原创粉丝点击