zoukankan      html  css  js  c++  java
  • 章节五、4-接口

    一、接口

    接口是特殊的抽象类,接口通常用interface来声明,一个类通过继承接口的方式,从而来继承接口的抽象方法。

    接口是java中的引用数据类型,和类很像,如果抽象类中所有的方法都是抽象方法,这时候就可以用另外一种形式来显示,这种形式就是接口。

    二、java不能多继承,但能通过接口多实现。接口不是被类继承了,而是要被类实现。

    三、接口不能被实例化,需要覆盖接口中所有的抽象方法,然后才能用子类来实现实例化,

    四、eclipse中如何新建一个接口?

    打开eclipse---》点击File---》点击new---》点击interface---》给该接口命名---》点击finish即可建立成功。

    eclipse是一个开放源代码的、基于java的可扩展开放平台,是java的集成开发环境,也可作为其它语言的集成开发环境。

    五、接口实现

    1、新建一个名为Inter接口如下:

    package introduction7;
    
    public interface Inter {
        /*接口中的成员一般有抽象方法和全局常量两种,而且这两种都有固定的修饰符
         * 成员都是由public来修饰,成员常量用public static final来修饰,
         * 方法用public abstract来修饰。
         * 如果不写会默认加上,只要是接口中的方法和变量都固定有这些修饰符。
         */
        
        /*
         * public表示该全局常量权限为公共的
         * static表示该全局产量能够类名直接访问
         * final表示该全局常量是一个固定不变的值
         * (只能是 public abstract,其他修饰符都会报错)
         */
        public static final int NUM = 4;
        public static final String speed = "100";
        
        public abstract void show1();
        public abstract void show2();
        
        public abstract void engineStart(String engineType,boolean isKeyless);
    }

    2、然后再新建一个名为InterfaceDemo类并实现Inter接口:

    刚实现时程序会报错,这是因为我们没有实现接口中的抽象类,

    因为我们使用了eclipse  java集成开发环境,所以有两种方式来解决此问题,

    第一种,手动重写接口中的所有方法,

    第二种,将鼠标指针移动到报错的类名上,然后点击弹出的提示“Add unimplemented methods”上

    然后eclipse会自动实现所有抽象方法,

    实现后

    package introduction7;
    
    //实现接口的关键字为implements
        public class InterfaceDemo implements Inter{
    
            @Override
            public void show1() {
                // TODO Auto-generated method stub
                System.out.println("这是接口中抽象方法show1的实现。。。");
            }
    
            @Override
            public void show2() {
                // TODO Auto-generated method stub
                System.out.println("这是接口中抽象方法show2的实现。。。");
            }
    
            @Override
            public void engineStart(String engineType, boolean isKeyless) {
                // TODO Auto-generated method stub
                System.out.println("这是接口中抽象方法engineStart的实现。。。");
            }
    }

    3、新建一个InterfaceDemo1类来调用InterfaceDemo类

    package introduction7;import java.awt.TexturePaint;
    
    public class InterfaceDemo1 {
    
        public static void main(String[] args) {
        //首先创建一个实现了Inter接口的InterfaceDemo类
        //格式:接口类型   接口变量名 = 关键字new  实例了该接口的子类
        /*
         * 这样调用体现了java三大特性(封装、继承、多态)之一---》多态,
         * 多态也就是一个事物的多种形态,
         * 例如动物是父类,狗是子类:
         *             动物  x = new 狗();
         * 也可以写成: 狗   x = new 狗();
         * 通过以上实例可知:同样一个狗对象,却具备了两种类型,
         * 小狗表示的是它,动物也表示它。
         * 当面对共性类型时,所以的子类对象都可以接收,说明这样提高了代码的扩展性,
         * 这就是多态的好处。
         * 多态的前提就是首先相互之间要有关系,要么是继承关系,要么是实现关系,
         * 通常要有覆盖,因为抽象方法不覆盖无法使用,
         */
            Inter myInter = new InterfaceDemo();
        //因此也可以写成子类的类型(InterfaceDemo类相当于Inter接口的子类):
        //    InterfaceDemo myInter = new InterfaceDemo();
            
        //调用InterfaceDemo类中的engineStart方法
            myInter.engineStart("6 cy1", true);
        }
    }    

    打印接果为:

    六、如何实现多接口?

    1、新建一个名为BMWInterface的接口

    package introduction7;
    
    public interface BMWInterface {
        
        public void Navigation();
    }

    2、在已经实现了Inter接口的InterfaceDemo类中继续实现BMWInterface接口,如果实现后类名报错,是因为该类中还没有实现BMWInterface接口中的方法。

    3、在InterfaceDemo1类中调用该接口

     结果为::

    七、static关键字

     1、通常来说,调用类时需要通过new关键字来创建并获得此类的对象,new实例化对象时数据存储空间才被分配,类中的方法才能被外界调用,但有两种情况用new无法解决:

      只为某特定域分配单一存储空间,不管创建多少对象。

      希望某个方法不与包含它的类的任何对象实例关联在一起。

    2、被static修饰的变量和方法会随着类的加载而加载,优先于对象出现在内存中,不能引用this或super。

    3、static关键字不能用于局部变量,只能作用于域。

    4、static用法:

      修饰变量

      修饰方法

      静态代码块

      修饰类

    5、静态不能调用非静态,非静态可以调用静态和非静态

    6、调用static方法时,在不创建任何对象的前提下可以直接调用。

    八、final关键字

    1、用于修饰类、类属性、类方法。

    2、被final修饰的类不能被继承,被final关键字修饰的类属性和类方法不能被覆盖,被final修饰的变量只能被赋值一次。

  • 相关阅读:
    SQL盲注工具BBQSQL
    嗅探X-Windows服务按键工具xspy
    多协议底层攻击工具Yesinia
    LLMNR欺骗工具Responder
    Arduino可穿戴教程保存源文件与打开已经存在的源文件
    GRDB使用SQLite的WAL模式
    CString之GetBuffer与ReleaseBuffer
    VC++ 模块与资源分离
    KV6.60 SP1
    Html之head部分详解
  • 原文地址:https://www.cnblogs.com/luohuasheng/p/9549940.html
Copyright © 2011-2022 走看看