zoukankan      html  css  js  c++  java
  • Java-接口

    1)接口可以理解为一种特殊的抽象类,是一种单独引用类型
    2)接口中的所有属性:全是公开,静态的常量
    接口中所有的方法:全是公开,抽象方法
    3)接口中的关键字:interface
    4)接口可以让一个类去实现(继承),该类继承接口中属性,并实现所有的抽象方法

    public class Test1 {
        public static void main(String[] args) {
            Aoo aoo=new Aoo();
            aoo.print();
            aoo.sub(23,12);
            //父类声明指向子类对象
            IAoo aoo2=new Aoo();
            aoo2.print();
            aoo2.sub(25, 23);
        }
    }
    interface IAoo{
        public static final double PI=3.14;
        int MIN=1;
        public abstract void sub(int num1,int num2);
        void print();
    }
    class Aoo implements IAoo{
        public void sub(int num1, int num2) {
            int result=num1-num2;
            System.out.println(result);
        }
        public void print() {
            System.out.println(PI);        
        }    
    }

    5)接口依然支持父类声明指向子类对象
    格式:接口名 对象名=new 实现类构造方法
    6)接口中没有构造方法,接口不能直接实例化,但其实现类可以直接实例化
    7)接口的目的:加强java的功能,一个子类只能有一个直接父类,但可以多个接口实现
    java单继承(父类),多实现(接口)

    public class Test1 {
        //抽象类名(父亲) 对象名=new 子类的构造方法
        public static void main(String[] args) {
            Emp1 emp=new Emp1();
            emp.f1();
            emp.f2();
        //父类声明指向子类对象
        //如果声明(定义)对象时,用接口名来定义,该对象只能调用定义名字接口中的方法
            Moo moo=new Emp1();
            moo.f1();
    //        moo.f2();---报错
        //用Moo声明的,Emp就相当于Moo的子类对象,f2方法在Moo并没有,不能调用
        }
    }
    interface Moo{
        void f1();
    }
    interface Noo{
        void f2();
    }
    class Emp1 implements Moo,Noo{
        public void f2() {
            System.out.println("Noo接口的方法");    
        }
        public void f1() {
            System.out.println("Moo接口的方法");
        }    
    }

    8)接口可以多继承:一个接口可以继承多个接口
    格式:接口 extends 接口1,接口2,接口3…

    public class Test1 {
        public static void main(String[] args) {
            FALL foo=new Foo2();
            foo.f1();
            foo.f2();
            foo.f3();
            foo.f4();
        }
    }
    interface F1{
        void f1();
    }
    interface F2{
        void f2();
    }
    interface F3{
        void f3();
    }
    interface FALL extends F1,F2,F3{
        void f4();
    }
    //接口的实现类必须要实现接口中所有的抽象方法
    class Foo2 implements FALL{
        public void f1() {
            System.out.println("f1");        
        }
        public void f2() {
            System.out.println("f2");        
        }
        public void f3() {
            System.out.println("f3");        
        }
        public void f4() {
            System.out.println("f4");
        }    
    }

    总结:接口跟抽象类之间的区别
    1.定义的方式不同
    接口是用interface,抽象类是abstract class
    2.内涵:
    接口强调要实现的方法,全部是抽象方法
    抽象类强调是继承关系,抽象类本质就是一个类,只不过包含抽象方法(没有方法体的方法)
    3.构造方法:
    接口没有任何构造方法
    抽象类可以有构造方法
    4.继承:
    接口可以多继承
    抽象类只能单继承
    5.访问修饰符:
    接口中的方法和属性:全部是public
    抽象类中的方法和属性:访问修饰符任意
    6.接口用implements表示实现类实现该接口,一个接口继承多个接口,可以extends
    抽象类只能用extends来表示继承

    public class Test1 {
        public static void main(String[] args) {
            Taxi taxi=new Taxi();
            taxi.name="出租车";
            taxi.color="绿色";
            taxi.speed=0;
            taxi.start();
            taxi.run();
            taxi.stop();
            taxi.getMoney();
            taxi.controlDegree();
            Bmw bmw=new Bmw();
            bmw.name="宝马";
            bmw.color="白色";
            bmw.speed=0;
            bmw.start();
            bmw.run();
            bmw.stop();
            bmw.controlDegree();
        }
    }
    //抽象类,Car,属性:名字,颜色,速度
    //                  方法:启动,行驶,刹车(抽象方法)
    //接口1,收费:getMoney
    //接口2,控制温度:controlDegree
    //Taxi:属性:名字,颜色,速度,价格
    //      方法:启动,行驶,刹车,收费,控制温度
    //Bmw:属性:名字,颜色,速度
    //     方法:启动,行驶,刹车,控制温度      
    abstract class Car{
        String name;
        String color;
        int speed;
        Car(){}
        Car(String name,String color,int speed){
            this.name=name;
            this.color=color;
            this.speed=speed;
        }
        public abstract void start();
        public abstract void run();
        public abstract void stop();
    }
    interface Fee{
        int Fee=100;
        void getMoney();
    }
    interface Degree{
        void controlDegree();
    }
    class Taxi extends Car implements Fee,Degree{
        double price;
        public void controlDegree() {
            System.out.println("控制温度");
        }
        public void getMoney() {
            System.out.println("收取"+Fee);
        }
        public void start() {
            speed=speed+100;
            System.out.println(name+"启动");
        }
        public void run() {
            System.out.println(name+"在行驶,速度"+speed);    
        }
        public void stop() {
            speed=0;
            System.out.println(name+"刹车了,速度"+speed);
        }    
    }
    class Bmw extends Car implements Degree{
        public void start() {
            speed=speed+120;
            System.out.println(name+"启动");
        }
        public void run() {
            System.out.println(name+"在行驶,速度"+speed);    
        }
        public void stop() {
            speed=0;
            System.out.println(name+"刹车了,速度"+speed);    
        }
        public void controlDegree() {
            System.out.println("控制温度");
        }
    }

    接口,工厂模式,父类声明指向子类的综合
    在sun公司,接口用来指定规范,比如很多种不同数据库,通过java来操作数据库的代码,都不太一样,sun不编写操作数据库具体代码,指定一个接口,再指定一个方法,由其他的数据库公司来实现该接口,编写操作自己的公司数据库的实现类

    public class Test1 {
        //设计一个接口,java连接数据库
        //sun:经常使用接口,作为规范,比如设计一个连接数据库接口,由其他数据库软件公司来编写该接口实现类
        public static void main(String[] args) {
            Driver db2=DriverFactory.getInstance(1);
            db2.connect();
            Driver oracle=DriverFactory.getInstance(2);
            oracle.connect();
            Driver sqlServer=DriverFactory.getInstance(3);
            sqlServer.connect();
        }
    }
    //一个接口Driver有3个不同的实现类,用来连接不同的数据库
    //工厂类:根据用户参数的不同来提供不同的数据库连接
    class DriverFactory{
        public static Driver getInstance(int type){
            Driver driver=null;
            if(type==1){
                driver=new DB2Driver();
            }else if(type==2){
                driver=new OracleDriver();
            }else if(type==3){
                driver=new SQLServerDriver();
            }
            return driver;
        }
    }
    interface Driver{
        void connect();//java连接数据库
    }
    class DB2Driver implements Driver{
        public void connect() {
            System.out.println("java连接DB2...");    
        }    
    }
    class OracleDriver implements Driver{
        public void connect() {
            System.out.println("java连接Oracle...");    
        }    
    }
    class SQLServerDriver implements Driver{
        public void connect() {
            System.out.println("java连接SQLServer...");        
        }    
    }

  • 相关阅读:
    CodeForces 639C Bear and Polynomials
    CodeForces 149E Martian Strings exkmp
    CodeForces 85D Sum of Medians Splay | 线段树
    CodeForces 149D Coloring Brackets
    CodeForces 526D Om Nom and Necklace
    CodeForces 875 D High Cry
    CodeForces 1018B The hat
    springMVC工程使用jreloader实现热部署
    ssh方式与服务器建立连接
    Weblogic在Linux下启动特别慢及进入控制台慢的解决方法
  • 原文地址:https://www.cnblogs.com/peiya/p/12693722.html
Copyright © 2011-2022 走看看