1.接口:interface:接口的地位等同于class,接口中的所有方法都是抽象方法。在声明接口中的方法的时候,可以使用abstract关键字也可以不使用。通常情况下,都会省略掉abstract关键字。

2.可以将接口看作是特殊的抽象类(抽象类中可以有具体方法,也可以有抽象方法,而接口中只能有抽象方法,不能有具体方法)

package com.cl.abstracttest;

public interface InterfaceTest {

    public abstract void output();//可以省略掉abstract关键字

}

3.类跟继承的关系

类可以实现接口。实现使用关键字implements表示。代表某个类实现了某个接口。

4.一个类实现了某个接口,那个该类必须要实现接口中声明的所有方法。如果该类是个抽象类,那么就无需实现接口中的方法了。

报错:The type MyClass must implement the inherited abstract method MyInterface.output()

解决办法:

package com.cl.abstracttest;

public class Test3 {

    public static void main(String[] args) {
MyClass myClass = new MyClass();
myClass.output();
}
} interface MyInterface{ public void output();
}
class MyClass implements MyInterface
{ @Override
public void output() {
System.out.println("test"); } }

5.java是单继承的,也就是说某个类只能有唯一一个父类,一个类可以实现多个接口,多个接口之间使用逗号分隔。

package com.cl.abstracttest;

public class Test3 {

    public static void main(String[] args) {
MyClass myClass = new MyClass();
myClass.output();
myClass.output2();
}
} interface MyInterface{ public void output();
} interface MyInterface2{
public void output2();
}
class MyClass implements MyInterface,MyInterface2
{ @Override
public void output() {
System.out.println("test"); } @Override
public void output2() {
System.out.println("test2"); } }
 

6.

package com.cl.abstracttest;

public class Test3 {

    public static void main(String[] args) {
MyClass myClass = new MyClass();
myClass.output();
myClass.output2();
myClass.output3();//从父类继承过来的
}
} interface MyInterface{ public void output();
} interface MyInterface2{
public void output2();
} class MyParent{
public void output3(){
System.out.println("output3");
}
} class MyClass extends MyParent implements MyInterface,MyInterface2//继承了父类,还继承了两个接口
{ @Override
public void output() {
System.out.println("test"); } @Override
public void output2() {
System.out.println("test2"); } }
输出结果如下:

test
test2
output3

 

多态:所谓的多态是指父类型的引用可以指向子类型的对象,或者接口类型的引用可以指向实现该接口的类的实例。关于接口与实现接口的类之间的强制类型转换方式与父类与子类之间的强制类型转换方式完全一样。

package com.cl.abstracttest;

public class Test4 {
public static void main(String[] args) {
AA bb = new BB();//接口类型的引用可以指向实现该接口的类的实例
bb.output();
}
} interface AA{
public void output();
}
class BB implements AA{ @Override
public void output() {
System.out.println("BB"); } }

关于接口与实现接口的类之间的强制类型转换方式与父类与子类之间的强制类型转换方式完全一样。这句话理解有如下代码

package com.cl.abstracttest;

public class Test4 {
public static void main(String[] args) {
/*向上类型转换
BB bb = new BB();
AA aa = bb;
bb.output(); */ //向下类型转换
AA aa = new BB();
BB bb = (BB)aa;
bb.output(); }
} interface AA{
public void output();
}
class BB implements AA{ @Override
public void output() {
System.out.println("BB"); } }

Java SE 第二十二讲----接口interface的更多相关文章

  1. Java SE 第二十四讲----static与final使用陷阱关键字

    1.对于final类型成员变量,一般来说有两种赋值方式: a)在声明final类型的成员变量时就附上初值 package com.cl.staticandfinal; public class Fin ...

  2. “全栈2019”Java多线程第二十二章:饥饿线程(Starvation)详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  3. “全栈2019”Java异常第二十二章:try-with-resources语句详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  4. Java SE 第二十三讲----static关键字and final关键字

    1.static关键字 [在二十二讲视频中30分钟开始讲授] 2.static修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量:一个对象对该静态成员变量进行了修改,其他 ...

  5. java se系列(十二)集合

    1.集合 1.1.什么是集合 存储对象的容器,面向对象语言对事物的体现,都是以对象的形式来体现的,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式.集合的出现就是为了持有对象.集 ...

  6. 菜鸡的Java笔记 第二十二 - java 对象多态性

    本次只是围绕着多态性的概念来进行讲解,但是所讲解的代码与实际的开发几乎没有关系,而且多态一定是在继承性的基础上才可以操作的,        而本次将使用类继承的关系来描述多态的性质,实际的开发中不会出 ...

  7. MySQL实战45讲学习笔记:第二十二讲

    一.引子 不知道你在实际运维过程中有没有碰到这样的情景:业务高峰期,生产环境的 MySQL 压力太大,没法正常响应,需要短期内.临时性地提升一些性能. 我以前做业务护航的时候,就偶尔会碰上这种场景.用 ...

  8. Java SE 第十六讲----面向对象特征之继承

    1.继承(inheritance):Java是单继承的,意味着一个类只能从另一个类继承(被继承的类叫做父类也叫[基类 baseclass]),继承的类叫做子类,java中的继承使用extends关键字 ...

  9. Java SE 第十六讲----面向对象特征之多态

    1.多态:polymorphism:我们说的子类就是父类(玫瑰是花,男子是人),因此多态的意思就是:父类型的引用可以指向子类的对象 public class PolyTest { public sta ...

随机推荐

  1. unity, SkinnedMeshRenderer.updateWhenOffscreen

    发现,必须勾选update when offscreen,当skinnedMeshRenderer发生形变时bounds才会更新.

  2. centos 安装 pip

    下载文件 wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate 执行安装 python get-pip.py

  3. 被Play framework狠狠的play了一把

    1.起因 早就听说play framework很火,而且是拯救Java程序员的神器,所以在全国纪念抗战胜利之际,本着学(man)习(zu)研(hao)究(qi)的态度想进行一番尝试. 2. 经过 2. ...

  4. MySQL下载、安装和修改root密码

    一.下载地址:MySQL_5.6.22_winx64_XiaZaiBa :http://rj.baidu.com/soft/detail/12585.html?ald 二.安装软件,安装到指定的路径, ...

  5. 解决504 Gateway Time-out(nginx)

    504 Gateway Time-out问题常见于使用nginx作为web server的服务器的网站 我遇到这个问题是在需要插入一万多条数据时候遇到的 一般看来, 这种情况可能是由于nginx默认的 ...

  6. The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine

    问题描述: 修改一个工具功能为读取excel文件中的数据(xls) 本机(windows server 2003 32位) 调试运行正常,部署到服务器(windows server 2003 64位) ...

  7. MS CRM 2011的自定义和开发(11)——插件(plugin)开发(二)

    http://www.cnblogs.com/StoneGarden/archive/2012/02/06/2339490.html MS CRM 2011的自定义和开发(11)——插件(plugin ...

  8. C# Tips: 将 VS2012 / VS2013 的.sln文件、project文件转换成 VS2010格式

    原来有一些VS2013的工程文件(.sln..csproj),使用.Net 4.0.现需要将它们转换成VS2010格式. 经实验,办法如下: (1) 在Solution文件(.sln)中: 把文件头部 ...

  9. 【Hadoop需要的Jar包】Hadoop编程-pom.xml文件

    JDK版本的要求 Hadoop 2.7 以及之后的版本,需要JDK 7: Hadoop 2.6 以及之前的版本,支持JDK 6: 对于Hadoop1.x.x版本,只需要引入1个jar: hadoop- ...

  10. Maven仓库—Nexus环境搭建及简单介绍

    1.    环境搭建 1.1  下载 http://www.sonatype.org/nexus/ NEXUS OSS [OSS = Open Source Software,开源软件--免费] NE ...