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. shell脚本实例-游戏脚本

    http://bbs.chinaunix.net/thread-3580033-1-1.html shell游戏收集贴 #!/bin/bash # Tetris Game #APP declarati ...

  2. BNUOJ 1006 Primary Arithmetic

    Primary Arithmetic 来源:BNUOJ 1006http://www.bnuoj.com/v3/problem_show.php?pid=1006 当你在小学学习算数的时候,老师会教你 ...

  3. Linux 下SVN自动更新

    1.找到svn的所在目录: 我的目录在/usr/local/svn/myproject 2.新建post-commit vim hooks/post-commit #!/bin/shexport LA ...

  4. android 完全退出应用程序(重要)

    android退出应用程序会调用android.os.Process.killProcess(android.os.Process.myPid())或是System.exit(0),这只是针对第一个A ...

  5. Jquery 使用小结

    JQuery API中文档地址:http://www.hemin.cn/jq/index.html JQuery 中文社区:http://www.jquery.org.cn/ 1.siblings() ...

  6. 在数据库查询时解决大量in 关键字的方法

    有时候在前台界面需要批量处理一些数据时,经常要用到update table set fields=value where keyid in ('1','2',....) 但如果这个数据量如果超过100 ...

  7. linux Shell的使用

    linux Shell的使用 下面是我对shell脚本使用的学习,写成日志,做个笔记,可以当做自己以后的复习. 1.输出hello world! vi test1.sh, 如果不会vi工具的使用,请参 ...

  8. Rest风格WEB服务(Rest Style Web Service)的真相

    http://blog.csdn.net/jia20003/article/details/8365585 Rest风格WEB服务(Rest Style Web Service)的真相 分类: J2E ...

  9. .NET_RSA加密全接触(重、难点解析)

    .NET_RSA加密全接触(重.难点解析) .NET Framework提供了两个类供我们使用RSA算法,分别是:用于加密数据的RSACryptoServiceProvider和用于数字签名的DSAC ...

  10. 利用百度地图API,获取经纬度坐标

    利用百度地图API,获取经纬度坐标 代码很简单,但在网上没找到现成的获取地图经纬度的页面. 就是想,给当前页面传递一个经纬度,自动定位到此经纬度.然后可以重新选择,选择完返回经纬度. 效果如下: 源代 ...