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. 021. asp.net两个DataSet数据集的合并

    protected void Page_Load(object sender, EventArgs e) { DataSet dsSource = new DataSet(); //创建源数据集 Da ...

  2. wikioi 1475 m进制转十进制

    /*===================================== 1475 m进制转十进制 题目描述 Description 将m进制数n转化成一个十进制数 m<=16 题目保证转 ...

  3. wikioi 1012最大公约数和最小公倍数【根据最大公约数和最小公倍数求原来的两个数a、b】

    /*====================================================================== 题目描述 输入二个正整数x0,y0(2<=x0& ...

  4. linux jdk+mysql+tomcat+nginx 项目部署步骤

    1.下载linux jdk1.7.0_79.tar.gz ; 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-dow ...

  5. [linux] linux 破解版confluence安装

    OS  centos 6.5  需要的安装包如下: jre-7u67-linux-x64.rpm atlassian-confluence-5.4.4-x64.bin mysql-connector- ...

  6. (转帖)BootStrap入门教程 (一)

      2011年,twitter的“一小撮”工程师为了提高他们内部的分析和管理能力,用业余时间为他们的产品构建了一套易用.优雅.灵活.可扩展的前端工具集--BootStrap.Bootstrap由MAR ...

  7. JSON.stringify(),JSON.parse(),toJSON()方法使用

    JSON.stringify(),将value(Object,Array,String,Number...)序列化为JSON字符串    JSON.parse(), 将JSON数据解析为js原生值   ...

  8. jq select操作全集

    添加option $("#ID option").each(function(){if($(this).val()==111){$(this).remove();}}); 移除op ...

  9. Linux命令之WC

    $ wc story.txt39 237 1901 story.txt● Use -l for only line count● Use -w for only word count● Use -c ...

  10. 更改AD查询LDAP条目的1000限制

    解除LDAP导入时的AD条目查询限制 解除LDAP导入或读取AD用户数限制问题 更改AD查询LDAP条目的1000限制 来源:http://www.jiancool.com/article/55373 ...