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

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,一经查实,立即删除!

相关文章

PrefixSpan算法原理总结

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

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

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

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

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

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

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

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

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

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…

推荐阅读《大话设计模式》的策划编辑陈禹成写的新书《电脑使用说明书》

三年前&#xff0c;我很幸运能与陈禹成&#xff08;当年叫陈冰&#xff0c;曾是清华大学出版社策划编辑&#xff09;合作&#xff0c;完成了《大话设计模式》的创作和出版工作。应该说&#xff0c;没有陈禹成的帮助&#xff0c;也不可能有《大话设计模式》的成功。非常感谢他&a…

c# asp.net mvc 开发的正方教务助手(一)

在网上百度了很多模拟登陆教务教务助手的教程 要么是java要么是php要么就是python 难得查找到一个c#的结果又是客户端的&#xff0c;一个网页版的都没看到 于是楼主决定在研究&#xff0c;自行写一个网页版方正教务助手 历时一个星期终于完成&#xff0c;效果如下所示&…

c# asp.net mvc 开发的正方教务助手(二)

在上一篇文章展示了项目实际运行情况 现在我们来分析该项目如何完成的&#xff1a; 第一步&#xff1a;登陆你们的教务&#xff0c;这是我们学习的教务的主页http://jw.svtcc.edu.cn/Default2.aspx&#xff0c;进去之后&#xff0c;打开使用火狐浏览器进行登陆分析 在火狐浏览…

单独安装想要的office_安装OFFICE不再求人,最省心的方法

强烈建议选择office部署工具Office Tool Plus 不建议选择微软官方的office 2016部署工具 因为还需要手动更改代码&#xff0c;不利于新手安装。office tool plus它能够帮助用户轻松的在线下载安装 Office 的各个版本&#xff0c;安装过程中用户可以自由选择安装哪些需要使用的组…

{php mysql}

###1.连接数据库服务器函数&#xff08;2个&#xff09;&#xff1a; mysql_connect,mysql_pconnect (1).mysql_connect() 格式&#xff1a;int mysql_connect(string [hostname] [:port],string [username],string [password]); hostname // * 服务器名username // * 服务器…

C# MVC的博客开发(一)登录

由于前端使用的是layui的模板&#xff0c;该模板自带登录和注册页面&#xff0c;但是此页面的登录和普通页面的登录有些不同登录后返回的数据也需要处理&#xff0c;这里我来整理下layui登录时候遇到的问题首先登录提交数据的js我们在login.html并没有找到&#xff0c;form提交…

C# MVC的博客开发(二)登录

解决了登录数据在哪里提交的问题我们进行后台的登录的编写和实现后台登录代码我就不详细讲解了就是把传输过去的数据和数据库进行匹配如果存在就返回一个值如果不存在就另外一个值但是登录的时候我们可能遇到用户输入的用户密码不对或者其他的错误&#xff0c;官网的首页输入密…

ASP.NET知识结构

ASP.NET知识结构 https://blog.csdn.net/yaolong168888/article/details/80126541 转载于:https://www.cnblogs.com/iamspecialone/p/11220086.html

C# MVC的博客开发(三)注册

在做注册的时候博主遇到了个很坑爹的问题 那就是本地发送邮件正常可是搬运到阿里云服务器发送邮件就gg了查询了很久才知道阿里云默认是把25发送邮件端口给封了 也就是说放在阿里云服务器的发送邮件是无法以无ssl加密的方式发送的&#xff0c;必须通过ssl家里的465端口去发送邮件…

python中if有几种使用方式_python 中if-else的多种简洁的写法

原博文 2017-11-02 15:18 − 因写多了判断语句&#xff0c;看着短短的代码却占据来好几行&#xff0c;于是便搜下if-else简洁的写法&#xff0c;结果也是发现新大陆 4种&#xff1a; 第1种:__就是普通写法 a, b, c 1, 2, 3 if a>b: c a else: c b 第二种&#xff1a;一行…

python多行字符串输入_python中怎么输入多行字符串

Python中输入多行字符串&#xff1a; 方法一&#xff1a;使用三引号>>> str1 Le vent se lve, il faut tenter de vivre. 起风了&#xff0c;唯有努力生存。 &#xff08;纵有疾风起&#xff0c;人生不言弃。&#xff09; >>> str1 Le vent se lve, il faut…

C# MVC使用阿里云对象存储加快图片加载速度(一)

公司有个点餐的项目有大量的图片需要在扫码后的网页进行加载&#xff0c;刚开始使用的客户少的时候公司的4核8G&#xff0c;5M带宽的服务器还能挺快的加载图片和网页&#xff0c;但是客户一多&#xff0c;由于客户大多是快餐行业的&#xff0c;中午点餐的人数是相当多的&#x…

css background 充满自适应_剖析一些经典的CSS布局问题,为前端开发+面试保驾护航...

一、让一个元素水平垂直居中&#xff0c;到底有多少种方案&#xff1f;水平居中对于 行内元素: text-align: center;对于确定宽度的块级元素&#xff1a;width和margin实现。margin: 0 auto;绝对定位和margin-left: -width/2, 前提是父元素position: relative对于宽度未知的块级…