1. 接口(interface)是抽象方法与常量值的集合;

2. 从本质上来讲,接口是一种特殊的抽象类,这种抽象类中只包含常量与方法的定义,而没有变量和方法的实现;

3. 接口中声明的属性默认为:public static final,也只能是:public static final,(接口中成员变量的定义);

4. 接口中只能定义抽象方法,而且这些方法默认为public,也只能是public的;

5. 接口可以继承其他的接口,并添加新的属性和抽象方法;

6. 多个无关的类可以实现同一个接口,一个类可以实现多个无关的接口;

7. 与继承关系类似,接口与实现类之间存在多态性:

多态的三个条件:继承,重写,父类引用指向子类对象;

由于Java中没有多继承,一个类只能有一个父类。一个父类可以有多个子类,而在子类里可以重写父类的方法;

用接口可以实现多继承,一个类或是可以同时实现多个接口;

一般而言,接口有利于代码的扩展,而继承则有利于代码功能的修改

8. Demo

Demo_1

public interface Runner{
int id = 1; // 相当于:public static final int id = 1;
public void start();
public void run();
public void stop();
}
// 正确

Demo_2

interface Singer{
public void sing();
public void sleep();
} class Sudents implements Singer{
private String name; public Sudents(String name) {
this.name = name;
}
public void study(){
System.out.println("Studying");
}
public String getName(){
return name;
}
public void sing() { // @Override
System.out.println("Student is Singing");
}
public void sleep() { // @Override
System.out.println("Student is sleping");
}
}
// 正确

Demo_3

interface Singer{
public void sing();
public void sleep();
}
interface Painter{
public void paint();
public void eat();
}
class Student implements Singer{
private String name;
public Student(String name) {
this.name = name;
}
public void study(){
System.out.println("studying");
}
public String getName(){
return name;
}
public void sing() { // @Override
System.out.println("student is singing");
}
public void sleep() { // @Override
System.out.println("student is sleeping");
}
}
class Teacher implements Singer, Painter{
private String name;
public Teacher(String name) {
this.name = name;
}
public String getName(){
return name;
}
public void teach(){
System.out.println("teaching");
}
public void paint() { // @Override
System.out.println("teacher is painting");
}
public void eat() { // @Override
System.out.println("teacher is eating");
}
public void sing() { // @Override
System.out.println("teacher is singing");
}
public void sleep() { // @Override
System.out.println("teacher is sleeping");
}
}
public class Test {
public static void main(String[] args){
Singer s1 = new Student("s1");
s1.sing();
s1.sleep();
Singer t1 = new Teacher("t1"); //相当于继承中的父类引用指向子类对象
t1.sing();
t1.sleep();
Painter p1 = (Painter) t1; //相当于继承中的父类引用指向子类对象
p1.paint();
p1.eat();
}
}
// 正确

Demo_3的运行结果:

student is singing
     student is sleeping
     teacher is singing
     teacher is sleeping
     teacher is painting
     teacher is eating

接口(interface)与多态的更多相关文章

  1. go面向对象之多态即接口(interface)

    Go 语言接口 Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口. 实例 /* 定义接口 */ type interface ...

  2. java中的接口interface

    关于接口 接口描述了实现了它的类拥有什么功能.因为Java是强类型的,所以有些操作必须用接口去约束和标记.接口作为类的能力的证明,它表明了实现了接口的类能做什么. 类似与class,interface ...

  3. java之接口interface

    接口 1.多个无关的类可以实现同一个接口 2.一个类可以实现多个无关的接口 3.与继承关系类似,接口与实现类之间存在多态性 4.定义java类的语法格式 < modifier> class ...

  4. Go语言学习笔记(四)结构体struct & 接口Interface & 反射

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...

  5. Golang 接口interface

    接口interface 接口是一个或多个方法签名的集合 只要某个类型拥有该接口的所有方法签名,即算实现该接口,无需显示声明实现了哪个接口,这成为Structural Typing 接口只有方法声明,没 ...

  6. Go语言学习笔记(四)结构体struct & 接口Interface & 反射reflect

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...

  7. go语言之行--接口(interface)、反射(reflect)详解

    一.interface简介 interface(接口)是golang最重要的特性之一,Interface类型可以定义一组方法,但是这些不需要实现.并且interface不能包含任何变量. 简单的说: ...

  8. Golang之interface(多态,类型断言)

    多态用法 package main //一种事物的多种形态,都可以按照统一的接口进行操作 //多态 import ( "fmt" "math/rand" &qu ...

  9. JavaSE入门学习21:Java面向对象之接口(interface)(二)

    一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.j ...

随机推荐

  1. 17秋 软件工程 团队第五次作业 Alpha Scrum4

    17秋 软件工程 团队第五次作业 Alpha Scrum4 今日完成的任务 世强:部门基础信息模块数据更新.部门审核提交: 港晨:设计编写登录界面的一部分: 树民:学习python基本语法.flask ...

  2. golang的json序列化问题

    首先看一段代码: package main import ( "encoding/json" "fmt" ) type Result struct { //st ...

  3. 【BZOJ4310】跳蚤

    [BZOJ4310]跳蚤 Description 很久很久以前,森林里住着一群跳蚤.一天,跳蚤国王得到了一个神秘的字符串,它想进行研究. 首先,他会把串分成不超过 k 个子串,然后对于每个子串 S,他 ...

  4. 装饰器 以及 django 中的应用

    装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权 ...

  5. socket 总结

    网络编程之进程:http://www.cnblogs.com/1a2a/p/7428759.html 网络编程之进阶:http://www.cnblogs.com/1a2a/p/7444446.htm ...

  6. linuxserver本地和百度云备份脚本小试

    本地单文件上传脚本.命名uf 这是在本机上做的測试,利用bpcs_uploader脚本实现,仅仅是进行简单的封装.自己主动完好云端文件路径. 技术要点:使用dirname获取文件所在文件夹.使用pwd ...

  7. 2018-2019-2 网络对抗技术 20165318 Exp5 MSF基础应用

    2018-2019-2 网络对抗技术 20165318 Exp5 MSF基础应用 原理与实践说明 实践原理 实践内容概述 基础问题回答 攻击实例 主动攻击的实践 ms08_067_netapi:自动化 ...

  8. Spring配置文件中的那些标签意味着什么(持续更新)

    前言 在看这边博客时,如果遇到有什么不清楚的地方,可以参考我另外一边博文.Spring标签的探索,根据这边文章自己来深入源码一探究竟.这里自己只是简单记录一下各标签作用,每个人困惑不同,自然需求也不一 ...

  9. python3 练习题 day02

    '''1.有变量name = "aleX leNb" 完成如下操作:1)  移除 name 变量对应的值两边的空格,并输出处理结果2)  移除name变量左边的"al&q ...

  10. (转)清除已运行过Rancher和K8S的主机上的环境数据

    文章转自 https://blog.csdn.net/CSDN_duomaomao/article/details/77684571?locationNum=5&fps=1 本文命令主要是参考 ...