Java中接口,抽象类.嵌套接口区别和用法

简介: Java中接口,抽象类.嵌套接口区别和用法

1接口


   接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

接口与类的区别:

    接口不能用于实例化对象。

    接口没有构造方法

    接口中所有的方法必须是抽象方法

    接口不能包含成员变量,除了 static 和 final 变量。

    接口不是被类继承了,而是要被类实现。

    接口支持多继承。

接口特性

    接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。

    接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。

    接口中的方法都是公有的。

抽象类和接口的区别

  1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
  2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
  3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
  4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。

如下图创建一个item类


package com.itheima.dao;
/**
 * 食物条目
 */
public interface Item {
    //名字
    public String name();
    //嵌套接口  打包
   public Packing packing();
    //价钱
    public float price();
}

在定义一个汉堡类Burger

package com.itheima.domain;
import com.itheima.dao.Item;
import com.itheima.dao.Packing;
//汉堡  实现条目
public  abstract class Burger implements Item {
    //抽象类里面可以有非抽象的方法
    public Packing packing() {
        return new Wrapper();
    }
    //抽象方法
    public abstract float price() ;
}

这个里面就是没有全部实现接口中的方法,把类定义为了抽象类


2.嵌套接口

interface嵌套interface

作用是降低耦合性


package com.itheima.dao;
/**
 * 食物条目
 */
public interface Item {
    //名字
    public String name();
    //嵌套接口  打包
   public Packing packing();
    //价钱
    public float price();
}
package com.itheima.dao;
//食物包装
public interface Packing {
    public String pack();
}

上面就是接口之间的嵌套


3.用抽象类来实现接口,可以不用重写接口中的方法

item接口


package com.itheima.dao;
/**
 * 食物条目
 */
public interface Item {
    //名字
    public String name();
    //嵌套接口  打包
   public Packing packing();
    //价钱
    public float price();
}

Burger 类为抽象类,只实现一部分方法

package com.itheima.domain;
import com.itheima.dao.Item;
import com.itheima.dao.Packing;
//汉堡  实现条目
public  abstract class Burger implements Item {
    //抽象类里面可以有非抽象的方法
    public Packing packing() {
        return new Wrapper();
    }
//
//    //抽象方法
//    public abstract float price() ;
}

VegBurger实现抽象类没有实现的其他方法

package com.itheima.domain;
public class VegBurger extends Burger  {
    //继承抽象类,抽象类没有实现的方法,必须实现
    public float price() {
        return 25.0f;
    }
    public String name() {
        return "Veg Burger";
    }
}


相关文章
|
2天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
6天前
|
数据采集 JSON Java
利用Java获取京东SKU接口指南
本文介绍如何使用Java通过京东API获取商品SKU信息。首先,需注册京东开放平台账号并创建应用以获取AppKey和AppSecret。接着,查阅API文档了解调用方法。明确商品ID后,构建请求参数并通过HTTP客户端发送请求。最后,解析返回的JSON数据提取SKU信息。注意遵守API调用频率限制及数据保护法规。此方法适用于电商平台及其他数据获取场景。
|
11天前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
43 6
|
26天前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
66 14
|
22天前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
21 1
|
1月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
52 8
|
28天前
|
Java API
Java中内置的函数式接口
Java中内置的函数式接口
25 2
|
1月前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
96 1
|
1天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者
|
3天前
|
安全 Java Kotlin
Java多线程——synchronized、volatile 保障可见性
Java多线程中,`synchronized` 和 `volatile` 关键字用于保障可见性。`synchronized` 保证原子性、可见性和有序性,通过锁机制确保线程安全;`volatile` 仅保证可见性和有序性,不保证原子性。代码示例展示了如何使用 `synchronized` 和 `volatile` 解决主线程无法感知子线程修改共享变量的问题。总结:`volatile` 确保不同线程对共享变量操作的可见性,使一个线程修改后,其他线程能立即看到最新值。