接口(interface)与多态
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)与多态的更多相关文章
- go面向对象之多态即接口(interface)
Go 语言接口 Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口. 实例 /* 定义接口 */ type interface ...
- java中的接口interface
关于接口 接口描述了实现了它的类拥有什么功能.因为Java是强类型的,所以有些操作必须用接口去约束和标记.接口作为类的能力的证明,它表明了实现了接口的类能做什么. 类似与class,interface ...
- java之接口interface
接口 1.多个无关的类可以实现同一个接口 2.一个类可以实现多个无关的接口 3.与继承关系类似,接口与实现类之间存在多态性 4.定义java类的语法格式 < modifier> class ...
- Go语言学习笔记(四)结构体struct & 接口Interface & 反射
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...
- Golang 接口interface
接口interface 接口是一个或多个方法签名的集合 只要某个类型拥有该接口的所有方法签名,即算实现该接口,无需显示声明实现了哪个接口,这成为Structural Typing 接口只有方法声明,没 ...
- Go语言学习笔记(四)结构体struct & 接口Interface & 反射reflect
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...
- go语言之行--接口(interface)、反射(reflect)详解
一.interface简介 interface(接口)是golang最重要的特性之一,Interface类型可以定义一组方法,但是这些不需要实现.并且interface不能包含任何变量. 简单的说: ...
- Golang之interface(多态,类型断言)
多态用法 package main //一种事物的多种形态,都可以按照统一的接口进行操作 //多态 import ( "fmt" "math/rand" &qu ...
- JavaSE入门学习21:Java面向对象之接口(interface)(二)
一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.j ...
随机推荐
- Java实现数据库的读写分离
引言 1.读写分离:可以通过Spring提供的AbstractRoutingDataSource类,重写determineCurrentLookupKey方法,实现动态切换数据源的功能:读写分离可以有 ...
- golang的一些基础数据类型转换
int -- string //string到int value_int,err:=strconv.Atoi(string) //int到string str:=strconv.Itoa(value_ ...
- SQL Server2008 18456错误
1.以windows验证模式进入数据库管理器. 第二步:右击sa,选择属性: 在常规选项卡中,重新填写密码和确认密码(改成个好记的).把强制实施密码策略去掉. 第三步:点击状态选项卡:勾选 ...
- 【 nginx 】怎么安装nginx
一,下载地址:http://nginx.org/en/download.html 二,下载完成之后,是一个安装包,解压之后就能直接使用 三,点击进去我们刚刚解压好的nginx的安装包,打开nginx. ...
- python 之 递归
终于来到了这里,这是一座山,山那边都是神仙 定义:在一个函数里调用函数本身 最好的例子就是,求阶乘 def factorial(n): if n == 1: return 1 elif n > ...
- swift函数的调用约定
The convention of the function, indicated by the attribute. This is similar to the language-level @c ...
- zip 的 压缩与解压
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/xiananliu/article/details/23993481 zip格式是开源的相比rar格式 ...
- 莫比乌斯函数 51nod-1240(合数分解试除法)
就是输出n时,莫比乌斯函数的值.直接将n唯一分解即可. 思路:筛出105以内的素数,因为109开方,105就差不多.当一个大数还没有被1000个素数分解,那么这个数基本上可以认为是素数(为合数为小概率 ...
- MySql常用命令集Mysql常用命令4
说明: 用中括号([])括起来的部分表示是可选的,用大括号({})括起来的部分是表示必须 从中选择其中的一个. 1 FROM子句 FROM 子句指定了Select语句中字段的来源.FROM子句后面是包 ...
- gitlab 数据同步
为了统一化管理,需要把老版本的 gitlab 仓库 同步到新的gitlab上. 1. 新建组, 新gitlab 建立的group 与 原gitlab相同.2. 新建project 3. 选择导入