java抽象类与接口

导读:本篇文章讲解 java抽象类与接口,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

一、抽象类

1、抽象类的格式

2、抽象类与普通类的区别

3、抽象方法与普通方法的区别

4、抽象类与抽象方法的使用

二、接口

1、接口的定义和使用

2、接口特性

3、面向接口编程

4、面向接口编程的优点

5、抽象类和接口的联系和区别

6、接口和类之间的关系:

7、接口与接口的关系:

三、接口补充

1、JDK7以前只能定义抽象方法

2、JDK8以后接口新增的方法

3、JDK9新增的方法


一、抽象类

        抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情。

        对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。

1、抽象类的格式

public abstract class 类名{}  //抽象类

访问修饰符 abstract 返回值类型 方法名 (参数列表)     //抽象方法 

注意:继承抽象要么重写抽象类中所有的抽象方法,要么是抽象类

2、抽象类与普通类的区别

 抽象类要用abstract修饰

 普通类可以实例化,抽象类不能实例化

如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。  

3、抽象方法与普通方法的区别

普通方法必须要有方法体,抽象方法不能有方法体(大括号也没有)

抽象方法要用abstract修饰

抽象方法必须存在于抽象类中

4、抽象类与抽象方法的使用

抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类

如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类

没有抽象构造方法,也没有抽象静态方法

抽象类中可以有非抽象的构造方法,创建子类的实例时可以调用

二、接口

接口是一种规范或标准,它们可以约束类的行为,是一些方法特征的集合,但是没有方法的实现。

1、接口的定义和使用

接口用关键字interface来定义、接口不能实例化

语法:

定义接口的语法:
[访问修饰符]  interface 接口名   extends 父接口1,父接口2,…{
                    //常量定义
                    //方法定义
}

接口和类之间是实现关系,通过implements关键字表示

语法:

类实现接口的语法:
[访问修饰符]  class  类名  extends  父类名 implements  接口1,接口2,…{
                    //类成员
}

实现类还可以在继承一个类的同时实现多个接口    
public class 类名 extends 父类 implements 接口1,接口2....{}

2、接口特性

1、接口的命名规则与类相同。如果修饰符是public,则该接口在整个项目中可见;如果省略修饰符,则该接口只在当前包可见。

2、接口中可以定义常量,不能定义变量。接口中的属性都会自动用public static final 修饰,即接口中的属性都是全局静态常量。

3、接口中方法自动用public  abstract修饰,接口中所有方法都是抽象方法。

4、接口不能实例化,接口中不能有构造方法。

5、接口直接可以通过extends实现继承关系,一个接口可以继承多个接口,但是接口不能继承类。

6、接口的实现类必须实现接口的全部方法,否则必须定义为抽象类。

3、面向接口编程

(面向对象六大设计原则之一)面向接口编程就是先把客户的业务逻辑线提取出来,作为接口,业务具体实现通过该接口的实现类来完成。当客户需求变化时,只需编写该业务逻辑的新的实现类,替换该接口的实现类就可以完成需求,不需要改写现有代码,减少对系统的影响。

接口体现了约定和实现相分离的原则

面向接口编程就意味着:开发系统时,主体架构使用接口,接口构成系统的骨架,这样就可以通过更换实现接口的类来实现更换需求

4、面向接口编程的优点

1、降低代码间的耦合性

2、易于程序的扩展,提高了程序的可扩性性

3、提高了程序的可维护性

5、抽象类和接口的联系和区别

相同点:1、代表系统的抽象层 2、都不能被实例化 3、都能包含抽象方法:用于描述系统提供的服务,不必提供具体实现

不同点:1、在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法 2、抽象类便于复用,接口便于代码维护 3、一个类只能继承一个直接的父类,但可以实现多个接口

6、接口和类之间的关系:

实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口

7、接口与接口的关系:

继承关系,可以单继承,也可以多继承

三、接口补充

1、JDK7以前只能定义抽象方法

2、JDK8以后接口新增的方法

1、允许在接口中定义默认方法,需要使用关键字default修饰

2、允许在接口中定义静态方法,需要用static修饰

作用:解决了接口升级的问题

接口中默认方法定义格式:

格式:public default 返回值类型 方法名(参数列表){}
例如:public default void show(){}

接口中默认的方法注意事项:

默认方法不是抽象方法,所以不强制被重写,但是需要重写的时候要去掉default关键字

public 可以省略,default不能省略

如果实现了多个接口,多个接口中存在相同名字的默认方法,子类就必须对该方法进行重写

//Inter接口

public interface Inter {

    //抽象方法
    public abstract void method();

     //接口中的默认方法
    public default void show(){
        System.out.println("接口中的默认方法----show")
    }
}
//实现类重写的抽象方法
//默认方法可以不用重写

public class InterImpl implements Inter{
    @Override
    public void method(){
    }

}

接口中静态方法的定义格式:

格式:public static 返回值类型 方法名(参数列表){}
例子:public static void show (){}

注意:

静态方法只能通过接口名调用,不能通过实现类或者对象名调用

public 可以省略,static 不能省略

//Inter接口

public interface Inter {

    //抽象方法
    public abstract void method();

     //接口中的默认方法
    public default void show(){
        System.out.println("接口中的默认方法----show")
    }

    //静态方法1
    public static void show1(){
        System.out.println("show1")
    }

    //静态方法2
    public static void show1(){
        System.out.println("show2")
    }

   
}

3、JDK9新增的方法

接口中私有方法的定义

格式1:private 返回值类型 方法名(参数列表){}
例如: private void show(){}

格式2:private static 返回值类型 方法名(参数列表){}
例如: private static void show(){}
//普通的私有方法,是给默认方法服务的
    private void show3(){
        System.out.println("show3")
    }

    //静态的私有方法,是给静态方法服务的
    private static void show1(){
        System.out.println("show4")
    }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/93380.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!