java 接口机制_关于接口(实现java的多态机制)

接口特性

1.接口可以多重实现。

2.接口中声明的属性默认为public static final的,也只能是public static final的,

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

4.接口可以继承其它的接口,并添加新的属性的抽象方法。

5.多个无关的类可以实现同一个接口。

6.一个类可以实现多个无关的接口。

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

ecb562151b4ec25bf55de54abf1c858d.png

关键字interface(接口),其实相当于abstract

class(抽象类),而实现(implements)接口相当于继承(extends)父类。本质上是一样的。

interface本质上是一个抽象类。它的属性只能是public static

final(即使你不写它的默认类型也是如此),也就是它的成员属于具有final关键字的静态变量,换句话说,它的成员不属于对象的,而是存放在date

seg区域的不可访问的常量。(这是为了防止多继承造成的变量重名的情况。) 而它的方法也只能是public并且由于是抽象类的方法,所以该方法本身也是抽象的(abstract)

接着是一段代码:

interface Singer {

public void

sing();   ―――→

定义一个Singer接口,里面有sing()和sleep()方法的声明

public void sleep();

}

interface Painter {

public void paint();

―――→定义一个Painter接口,里面有paint()和eat()的方法的声明

public void eat();

}

class Student implements Singer

{

private String name;

―――→Student实现了Singer接口,增加了一个

Student(String

name){                   String类的name,以及重写了Singer接口的方法

this.name = name;

}

public void study(){

System.out.println("student is

studying");

}

public void sing(){

System.out.println("student is

singing");

}

public void sleep(){

System.out.println("student is

sleeping");

}

}

class Teacher implements Singer , Painter {

private String name;

Teacher(String

name){             ―――→Teacher类实现了Singer和Painter接口,也就

this.name =

name;拥有Singer和Painter里头的方法。并且重写了接口的方法。

}

public void teach(){

System.out.println("teacher is

teaching");

}

public void sing(){

System.out.println("teacher is

singing");

}

public void sleep(){

System.out.println("teacher is

sleeping");

}

public void paint(){

System.out.println("teacher is

painting");

};

public void eat(){

System.out.println("teacher is

eating");

};

}

public class Interface {

public static void main(String

args[]){

Singer s1 = new

Student("pipi");

s1.sing();

s1.sleep();

Singer s2 = new

Teacher("gigi");

s2.sing();

s2.sleep();

Painter p = (Painter)s2;

p.paint();

p.eat();

}

}  着重从main方法分析起, Singer

s1 = new Student("pipi"); 一个Singer类型的引用变量s1

“指向”一个Student的对象,我的指向加引号意思是由于s1是Singer类型的引用,所以实际上它只看得到Singer接口里头的sing()和sleep()方法,如果加上一句s1.study();那么。程序就会报错,因为study()是Student的方法。

而且s1虽然是Singer类型,但是它的实例是Student,所以sing()虽然在Singer和Student中都有sing()的声明。但由于多态机制是按照实例进行的,所以它调用的是Student里头的sing()方法,也就是接口也具有多态性。

在看看代码的结构,Student和Teacher都实现了Singer接口,这就是多个无关的类可以实现同一个接口。而Teacher同时实现了Singer和Painter接口,也就是一个类可以实现多个无关的接口。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值