接口(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

时间: 2024-10-23 11:15:47

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

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

1.go语言的多态是用接口来实现的interface package main import "fmt" //面向对象的多态是通过接口interface来实现的,不同的对象,调用相同的接口,实现不同的效果 //go语言中,接口interface是一个自定义类型,描述了一系列方法的集合,关键字interface //接口不能被实例化 //定义接口的方法 //type 接口名字 interface { // //} //接口的名字一般以er结尾 //定义一个Personer的接口 type

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

一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.java源文件代码: public class Test{ public static void main(String[] args){ //实现接口Singer Singer s1 = new Student("Amy"); s1.sing(); s1.sleep(); s1.study

java之接口interface

接口 1.多个无关的类可以实现同一个接口 2.一个类可以实现多个无关的接口 3.与继承关系类似,接口与实现类之间存在多态性 4.定义java类的语法格式 < modifier> class < name>[extends< superclass>][implements< interface>[, interface]*]{ <declarations>* } 附: 1.接口(interface)是抽象方法和常亮值的定义的结合. 2.从本质上讲,

Golang之interface(多态)

多态用法 package main //一种事物的多种形态,都可以按照统一的接口进行操作 //多态 import ( "fmt" "math/rand" "sort" ) type Student struct { Name string Id string Age int sortType int } type Book struct { Name string Author string } //切片默认传地址 type StudentArr

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

一.interface简介 interface(接口)是golang最重要的特性之一,Interface类型可以定义一组方法,但是这些不需要实现.并且interface不能包含任何变量. 简单的说: interface是方法的集合 interface是一种类型,并且是指针类型 interface的更重要的作用在于多态实现 interface定义 type 接口名称 interface { method1 (参数列表) 返回值列表 method2 (参数列表) 返回值列表 ... } interf

JAVA之旅(七)——final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展

JAVA之旅(七)--final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展 OK,我们继续学习JAVA,美滋滋的 一.final 我们来聊聊final这个关键字 final可以修饰类,方法和变量 final修饰的类不可以被继承 final修饰的方法不可以被覆盖 final修饰的变量是一个常量,只能被赋值一次 内部类只能访问被final修饰的局部变量 final,故名思意,就是最终的意思,由以上的五种特性,不过final的出现,也是有

接口 Interface

interface 关键字 声明接口 接口中的成员默认都是public 能力不一样的时候适合用接口 using System; using System.Collections; using System.Collections.Generic; namespace Dome { class dom { static void Main(string[] args) { play iplay = new student(); iplay.iplay(); Console.WriteLine();

Android中接口(Interface)的简单使用

  Android中接口(Interface)的简单使用 Java中的接口可以被看作是只包含常量和抽象方法的抽象类 . 可以使用如下方式定义一个接口: public interface InterfaceDemo { int i = 10; void method1(); int method2(); } 使用1: 解决“多重继承”的问题 Java语言本身是不支持类的多重继承(多重继承是指一个类从多个类继承而来,即一个类拥有多个超类)的,但一个类却可以实现多个接口.这样,我们可以将一些抽象方法定

C++里的接口(Interface)

C++是允许多重继承的,而这个设计既会引起问题又不是很常用,于是java和C#都采用了另一种方式:接口(Interface).类继承(实现)接口并不表明 is-a关系,而是“有某种功能”.“符合某种性质”的关系.C++虽然语法上不支持接口,但是这个思路还是可以拿来用的嘛.比如设计这样一个接口: struct hashable { virtual size_t hash_code() = 0; }; 然后让一个类继承它,并实现函数,就代表了该类是可哈希的. 事情没这么简单,在C++里,接口还可以有