无法创建接口的实例_什么是接口?

6f61abe6a04353cc42ae032e8972b45b.png

接口

接口概述

接口,是java语言中一种类型,是方法的集合,如果说 类的内部封装了成员变量,构造 方法,和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法,默认方法和静态方法

接口是对功能的扩展们也是声明规则的一种方式 狭义的角度来看,接口指的就是java的关键字,interface
class 类名{}
interface 接口名{}
接口的出现,打破了java中只支持单继承的[局限性] 接口和类之间的关系,实现关系,可以单实现,也可以多实现

问题:生活中的USB接口体现的是什么思想? 功能的[拓展] 1.USB鼠标 2.USB键盘 3.USB移动硬盘

生活中的接口也体现了一种[规则]的思想 1.电脑厂商设计USB接口的时候是长方形的 2.USB鼠标键盘硬盘在设计USB接口的时候也是长方形的

开始写接口

1.接口的定义,他与定义类的方式相似,但是使用interface关键字,他也会被编译成class文件 ,但是一定要明确它并不是类,而是另外一种引用数据类型

public class 类名.java --> .class
public interface 类名.java -->.class
引用数据类型: 类 , 数组, 接口

2.接口的使用,他不能直接创建对象,但是可以被实现(implements,类似于被继承) ,一个实现接口的类(可以看做是接口的子类),需要实现接口中所有的抽象方法,创建 该类对象,就可以调用方法了,否则 必须把它也变成一个抽象类

定义格式

public interface 接口名称{//抽象方法//默认方法//静态方法
}含有抽象方法 : 使用abstract关键字修饰,可以省略,没有方法体,该方法供子类实现使用public interface InterFaceName{public abstract void method();}含有默认方法和静态方法:默认方法: 使用default修饰,不可省略,供子类调用或重写静态方法:使用static修饰,供接口直接使用public interface InterFaceName {public default void method(){//执行语句}public static void method() {//执行语句}}

特点: 1.接口不能实例化 2.接口中定义的方法只能是抽象方法 原因:即使不写abstract,系统也会默认加上这个关键字 注意接口与类之间的关系是实现关系,通过implements关键字进行实现

接口的特点

● 定义接口使用的是interface关键字

interface Inter{}

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

class InterImp implements Inter {}

● 接口不能实例化

如果接口允许实例化,就可以调用内部的抽象方法,调用没有方法体的抽象方法没有意义

● 接口有没有其他的方式实例化呢? 1. 直接创建实现类对象使用 2.使用多态的形式创建

Inter i = new InterImp();

基本的实现

类和接口的关系为实现关系,即类实现接口,该类可以称为接口的实现类,也可以称为接口的 子类.实现的动作类似继承,格式相仿,只是关键词不同,实现使用implements关键字.

非抽象子类实现接口:

1.必须重写接口中所有抽象方法 2.继承了接口的默认方法,可以直接调用,也可以重写

实现格式

class 类名 implements 接口名 {//重写接口中抽象方法[必选]//重写接口中默认方法[可选]
}

抽象方法的使用

必须全部实现,代码如下:

定义接口:

public interface LiveAble{//定义抽象方法public abstract void eat();    public abstract void sleep();}

定义实现类:

public class Animal implements LiveAble{@Overridepublic void eat () {System.out.println("吃东西");}@Overridepublic void sleep () {System.out.println("睡觉");}         }

定义测试类:

public class InterfaceDemo {public static void main (String []args){//创建子类对象Animal a = new Animal();//调用实现后的方法a.eat();a.sleep();}}//输出结果://吃东西, 睡觉

默认方法的使用

可以继承,可以重写,二选一,但是只能通过实现类的对象来调用

继承默认方法,代码如下

定义接口:

public interface LivaAble{public default void fly (){System.out.println("天上飞");}
}

定义实现类:

public class Animal implements LiveAble {// 继承,什么都不用写,直接调用
}

定义测试类:

public class InterFaceDemo{public static void main (String [] args) {    //创建子类对象Animal a = new Animal();//调用默认方法a.fly();   //输出天上飞}  
}

重写默认方法,代码如下

定义接口:

public interface LivaAble{public default void fly (){System.out.println("天上飞");}
}

定义实现类:

public class Animal implements LiveAble {@Overridepublic void fly() {System.out.println("自由自在的飞");}
}

定义测试类:

public class InterFaceDemo{public static void main (String [] args) {    //创建子类对象Animal a = new Animal();//调用重写方法a.fly();   //输出自由自在的飞}  
}

静态方法的使用

静态与.class文件相关,只能使用接口名调用,不可以通过实现类的类名或者实现类的对象调用

代码如下:

定义接口:

public interface LivaAble{public static void run (){System.out.println("跑起来");}
}

定义实现类:

public class Animal implements LiveAble {//无法重写静态方法
}

定义测试类:

public class InterFaceDemo{public static void main (String [] args) {    //Animal.run()//  [错误] 无法继承方法,也无法调用LiveAble.run();// 输出跑起来  }  
}

接口的多实现

对于接口而言,一个类是可以实现多个接口的,这叫做接口的多实现,并且一个类只能 继承一个父类,同时实现多个接口

实现格式:

可选操作
class 类名 [extends 父类名 ] implements 接口名1,接口名2,接口名3... {
// 重写接口中抽象方法【必须】
// 重写接口中默认方法【不重名时可选】
}

抽象方法

接口中,有多个抽象方法时,实现类必须重写所有抽象方法,如果抽象方法有重名的 只需要重写一次,代码如下:

定义多个接口:

interface A {public abstract void showA();public abstract void show();}interface B {public abstract void showB();public abstract void show();}

定义实现类:

public class C implements A,B{@Overridepublic void showA() {System.out.println("showA");}@Overridepublic void showB() {System.out.println("showB");}@Overridepublic void show() {System.out.println("show");}}

默认方法

接口中,有多个默认方法时,实现类都可继承使用,如果默认方法有重名的, 必须重写一次 代码如下:

定义多个接口:

interface A {public default void methodA(){}public default void method(){}}interface B {public default void methodB(){}public default void method(){}}

定义实现类:

public class C implements A,B{@Overridepublic void method() {System.out.println("method");}}

静态方法

接口中,存在同名的静态方法并不会冲突,原因是只能通过各自接口名访问静态方法

优先级的问题:

当一个类,即继承父类,又实现多个接口时, 父类中的成员方法与接口中的默认方法重名 ,子类就近选择执行父类的成员方法,代码如下:

定义接口:

interface A {public default void methodA(){System.out.println("AAAAAAAAAAAA");}
}

定义父类:

class D {public void methodA(){System.out.println("DDDDDDDDDDDD");}
}

定义子类:

class C extends D implements A {// 未重写methodA方法}public class Test {public static void main(String[] args) {C c = new C();c.methodA();}}输出结果:DDDDDDDDDDDD

接口的多继承

一个接口能继承另一个或者多个接口, 这和类之间的继承比较相似,接口的继承 使用extends关键字, 子接口继承父接口的方法. 如果父接口中的方法有重名的 .那么子接口需要重写一次,代码如下:

定义父类接口:

interface A {public default void method(){System.out.println("AAAAAAAAAAAAAAAAAAA");}}interface B {public default void method(){System.out.println("BBBBBBBBBBBBBBBBBBB");}}

定义子接口:

interface D extends A,B{@Overridepublic default void method() {System.out.println("DDDDDDDDDDDDDD");}}
子接口重写默认方法时,default关键字可以保留 子类重写默认方法时,default关键字不可以保留

其他成员特点

接口中 : 无法定义成员变量,但是可以定义常量,其值不可改变.默认使用public static final修饰接口中,没有构造方法,不能创建对象接口中没有静态代码块

看一段代码(扩展,规则)

public class DemoInterface{public static void main(String [] args){岳不群 小岳子 = new 岳不群 ();小岳子.zg();//用锤子}}interface 葵花宝典 {//声明规则public abstract void zg();}class 岳不群 implements 葵花宝典{@Overridepublic void zg () {System.out.println("用锤子");
}class 林平之 implements 葵花宝典{@Overridepublic void zg () {System.out.println("用牙签");
}

再来一段代码

public class DemoInterface{public static void main(String [] args){SmokeStudent ss = new SmokeStudent();ss.study();ss.smoking();}}//定义学生类
class Student {     public void study () {System.out.println("学生学习");}//定义抽烟接口   
interface Smoke {//声明规则,并不是所有学生都具备抽烟的功能//抽烟功能就属于功能的一种[扩展].public abstract void smoking();}//接口的出现,打破了Java中只支持单继承的局限性
//在有了亲爹的同时,还能有个干爹
class SmokeStudent extends Student implements Smoke{@Overridepublic void smoking(){System.out.println("有故事的学生,抽烟"")}
}

面向接口编程思想(多态+接口)

MySQL
Oracle

包的概述和注意事项

包的作用是什么? 如何定义一个包 如何划分包?
总结:● 包就是文件夹,用来管理类文件的● package 包名;● 包名的定义规范,一般都是公司的域名倒着写itheima.comitcast.cncn.itcast.项目名com.itheima.gjpA. 按照功能划分(很少见)车载系统com.itheima.car.mp3com.itheima.car.video...B. 按照模块划分(最常见的)com.itheima.gjp.domain-->(实体类)javabean类,用于封装数据的类com.itheima.gjp.utils-->工具类(收好了,以后可以说是自己写的)com.itheima.gjp.view-->视图层com.itheima.gjp.ctrl-->控制层com.itheima.gjp.services-->业务层com.itheima.gjp.dao-->数据库访问层(DataBase Object Access)...

import class package的顺序关系是

package ->import ->class
ctrl+ shift+o  整理包的快捷键

导包的格式以及使用

引用不同包下的类文件(导包的方式)
格式: import 包名.类名*   代表通配符  ,(java.util.*)   导入了util包下面所有的类

分别导入比较省内存

如果自己写的类,和java的类名想通了 会优先使用我们自己写的类
那如果我们自己写的类和java一样了 ,还想使用java写好的类,怎么办?需要通过[全类名]方式创建对象了
[全类名]: 包名+类名eg: java.util.Scanner sc = new java.util.Scanner(System.in);

四种权限修饰符的概述和访问特点(基本就是private和public)

| |本类|同一个包下(子类和无关类)|不同包下(子类)|不同包下(无关类)|也就是| |---|---|---|---|---|---| |private|✔| | | |只能在本类当中访问| |default|✔|✔| | |(本类),同一个包下| |protected|✔|✔|✔| | |public|✔|✔|✔|✔|权限最大,不跨项目都可访问|

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/410601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[html] H5页面在微信中如何禁止分享给好友和朋友圈?

[html] H5页面在微信中如何禁止分享给好友和朋友圈? 利用JSBridge实现调用微信提供的一些原生功能,可以通过调用隐藏操作菜单来实现禁用分享。 代码如下: document.addEventListener(WeixinJSBridgeReady, function onBridgeReady() { Weixi…

jeecms添加站点

Step1:点击【站点管理】,然后点击【添加站点】。 Step2:按照下图填写,注意【路径】这一栏!!这里我随便写了个【aaa】。 Step3:这个时候在本地部署的tomcat的模板路径:tomcat/webapps…

[html] 举例说明只用html和css如何使得一个列表编号倒序?

[html] 举例说明只用html和css如何使得一个列表编号倒序&#xff1f; <!DOCTYPE html> <html> <body> <style> ol{ display: flex; flex-wrap: wrap-reverse } li{ width: 100% } </style> <ol><li>咖啡</li><li>牛奶&…

猜数字游戏python程序_python经典小程序:猜数字游戏

#猜数字游戏 import random #impor语句导入random模块 guessor0;print("#"*30) #输出30个”#“&#xff08;”##############################“&#xff09;用于装饰输出代码&#xff0c;同下 print("hello! \nwhat is you name?") #“\n”换行 print(&q…

HTML的DOM和XML的DOM对象的区别

HTML的DOM和XML的DOM对象的区别 1.DOM&#xff08;Document Object Moder&#xff09;被称作文档对象模型&#xff0c;它是语言和平台中立的接口&#xff0c;允许程序和脚本动态访问和更新文档的内容&#xff0c;结构和风格 2.在AJAX中&#xff0c;DOM对于我们来说是HTML和XML文…

PrefixSpan算法原理总结

前面我们讲到频繁项集挖掘的关联算法Apriori和FP Tree。这两个算法都是挖掘频繁项集的。而今天我们要介绍的PrefixSpan算法也是关联算法&#xff0c;但是它是挖掘频繁序列模式的&#xff0c;因此要解决的问题目标稍有不同。 一、1. 项集数据和序列数据 首先我们看看项集数据和序…

[html] 如何给input的右上角加个清除的按钮?

[html] 如何给input的右上角加个清除的按钮&#xff1f; <title>Insert title here</title> <style type"text/css">.round { /大span/ background: #fff none repeat scroll 0 0; border: 1px solid #bbb; display: inline-block; height: 28px;…

如何下载python模块_Python第三方库(模块)下载和安装(使用pip命令)

进行 Python 程序开发时&#xff0c;除了使用 Python 内置的标准模块以及我们自定义的模块之外&#xff0c;还有很多第三方模块可以使用&#xff0c;这些第三方模块可以借助 Python官方提供的查找包页面&#xff08;https://pypi.org/&#xff09;找到。 使用第三方模块之前&am…

Ajax技术的基本原理

我用一个简单的用户名验证的例子来谈一谈我对Ajax的了解: 这个例子用到了两个JSP和一个JS,我没有用后台来验证,因为原理是一样的. 1.用户注册表单页:ajaxCheckUser.jsp <% page language"java" contentType"text/html; charsetUTF-8" pageEncoding&q…

什么是二叉树?以及二叉树如何遍历?

像现实当中的树一样&#xff0c;需要把现实当中的树反过来看。 树根&#xff08;4偏移&#xff09; 左子树(0偏移) 右子树&#xff08;8偏移&#xff09; (树根) (树根) 左子树 右子树 左子树 右子树 (树根) (树根…

python装饰器带参数函数_当我使用带参数的python装饰器时,如何将参数传递给最内部的函数?...

当Func返回不是真时&#xff0c;我的装饰器用于召回Func。def deco_retry(retry_times): def _deco_retry(func): def wrapper(*args, **kwargs): while retry_times > 0: ret func(*args, **kwargs) if ret: return ret retry_times - 1 return wrapper return _deco_retr…

[html] 进入编辑页面时,如何把光标聚焦到第一个input?

[html] 进入编辑页面时&#xff0c;如何把光标聚焦到第一个input&#xff1f; <title>Insert title here</title> <script> window.onload function () { var input document.getElementById("username"); input.focus(); } </script> 个…

GODADDY主机用tar命令通过SSH远程打包20M以上的文件

GODADDY的虚拟主机控制面板虽然使用起来非常方便&#xff0c;对于文件管理的很多操作也非常到位&#xff0c;但是有一个非常令人头疼的问题&#xff0c;就是GODADDY在 主机控制面板中只支持小于20M的文件打包&#xff0c;这对于大部分的站长朋友来说&#xff0c;是非常不方便的…

[html] 你有使用过MediaRecorder吗?说说它的运用场景有哪些?

[html] 你有使用过MediaRecorder吗&#xff1f;说说它的运用场景有哪些&#xff1f; 录屏个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

python链表怎么定义_python:链表定义以及实现

链表&#xff08;linked list&#xff09;是一组数据项的集合&#xff0c;其中每个数据项都是一个节点的一部分&#xff0c;每个节点还包含指向下一个节点的链接. 链表的数据结构如下图所示在链表中删除操作可以通过修改指针来实现,如下图所示:插入则是调整,插入点的前后两个指…

NetCore 依赖注入之服务之间的依赖关系

简单介绍,直接官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/dependency-injection?viewaspnetcore-2.2 public interface IOperation {Guid OperationId { get; } }public interface IOperationTransient : IOperation { }public interface IOperatio…

安卓注册手机短信验证码验证的案例-01

为了实现注册手机验证验证码 在网上百度了许久的注册手机验证码发送验证的案例要么是太过时要么就是不能用了 在此把我最近几天研究的成果发到这里希望 能够给遇到相同问题的人给予帮助 首先看看运行的效果图&#xff1a; 简单的介绍下博主用的是mod 的sdk来短信验证 使用的…

项目管理理论与实践系列文章索引

项目管理理论与实践&#xff08;1&#xff09;——企业项目管理介绍 项目管理理论与实践&#xff08;2&#xff09;——软件需求分析 项目管理理论与实践&#xff08;3&#xff09;——如何进行有效的项目管理 项目管理理论与实践&#xff08;4&#xff09;——UML应用&#xf…

Gym - 100543L

Gym - 100543Lhttps://vjudge.net/problem/153854/origin区间dp&#xff0c;要从区间长度为1开始dp #include<iostream> #include<cstdio> #include<queue> #include<algorithm> #include<cmath> #include<ctime> #include<set> #in…

安卓注册手机短信验证码验证的案例-02

本部分我们将讲述如何实现手机注册验证码的代码 首先我们得有一个验证码的界面如下图所示&#xff1a; 代码如下&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/an…