java面向接口典型案例_Java面向接口编程小例子 2

本文通过防火门、防盗门和防火防盗门的案例,详细解释了Java面向接口编程的实现,包括接口的定义、抽象类的使用以及多态的概念。在实践中,指出了实现接口时权限控制的注意事项,并讨论了使用父类引用指向子类对象时的限制和优势。同时,介绍了多态的四个特性,强调了方法的动态调用和变量不可重写的原则。
摘要由CSDN通过智能技术生成

//防火门,防盗门,防火防盗门,门,防盗,防火

interface Dfire {

int Dnum = 100;

void fire();

}

interface Dtheif {

int Dnum = 100;

void theif();

}

abstract class Door {

abstract void open();

abstract void close();

}

class DfireDoor extends Door implements Dfire {

void open() {

System.out.println("防火门开了");

}

void close() {

System.out.println("防火门关了");

}

public void fire() {

System.out.println("我能防火");

}

}

class DtheifDoor extends Door implements Dtheif {

public void open() {

System.out.println("防盗门开了");

}

public void close() {

System.out.println("防盗门关了");

}

public void theif() {

System.out.println("我能防盗");

}

}

class DallDoor extends Door implements Dfire,Dtheif {

void open() {

System.out.println("防火防盗门开了");

}

void close() {

System.out.println("防火防盗门关了");

}

public void theif() {

System.out.println("我能防盗");

}

public void fire() {

System.out.println("我能防火");

}

}

class App2 {

public static void main(String[] args) {

Door d1 = new DfireDoor();

d1.open();

d1.close();

DfireDoor dd1 = new DfireDoor();

dd1.fire();

Door d2 = new DtheifDoor();

d2.open();

d2.close();

Door d3 = new DallDoor();

DallDoor dd3 = new DallDoor();

d3.open();

d3.close();

dd3.theif();

}

}

一开始在实现借口的类那里的方法没有加public,导致继承中权限降低,出错

接口中所有的方法与变量都默认是 public 的,在接口中可以不写出来。但在实现类中,如果不明写的话,就变成了 friend  的了,也就是 “包访问权限”。而JAVA又规定,在实现接口或者覆写父类方法时,不能降低父类方法的访问权限,但是可以提高。也就是可以按照  friend protected public 来提高访问权限,但不能按照 public protected friend 来降低访问权限。

然后还有一个问题就是用Door类型的d1去引用DoorDfire型,可以调用Door中重写的open和close方法,但是这样声明的d1虽然引用的是DfireDoor还是不能调用fire接口的fire方法

这个问题看在明天的讲解中能不能解决

-------------------------------------------------------------------------------------------

使用父类类型的引用指向子类的对象是不能去调用接口的方法,因为在父类中也没有声明接口的方法,只声明了将要被子类重写的方法,不能用是正常的。这也是这样声明的弊端,但好处就是兼容性更好,这点在后面会遇到很多。

然后补充点

多态:

一、使用父类类型的引用指向子类的对象;

二、该引用只能调用父类中定义的方法和变量;

三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)

四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值