-
2018-12-25 22:01:55
接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个抽象的基类,让所有的Servlet都继承这个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码,伪代码如下:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public abstract class BaseServlet extends HttpServlet {
public final void service(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
// 记录访问日志
// 进行权限判断
}protected abstract void doService(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException;
// 注意访问权限定义成protected,显得既专业,又严谨,因为它是专门给子类用的
}class MyServlet1 extends BaseServlet {
protected void doService(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
// 本Servlet只处理的具体业务逻辑代码
}
}父类方法中间的某段代码不确定,留给子类干,就用模板方法设计模式。
备注:这道题的思路是先从总体解释抽象类和接口的基本概念,然后再比较两者的语法细节,最后再说两者的应用区别。比较两者语法细节区别的条理是:先从一个类中的构造方法、普通成员变量和方法(包括抽象方法),静态变量和方法,继承性等6个方面逐一去比较回答,接着从第三者继承的角度的回答,特别是最后用了一个典型的例子来展现自己深厚的技术功底。
更多相关内容 -
JAVA:一个类实现多个接口
2021-02-12 16:54:17它们之间区别:接口是公开的,里面不能有私有的方法或变量,而抽象类是可以有私有方法或私有变量的;代码演示:接口Apublic interface A {public abstract void play() ;public abstract void beFriendly();}接口B...abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制。它们之间区别:
接口是公开的,里面不能有私有的方法或变量,而抽象类是可以有私有方法或私有变量的;
代码演示:
接口A
public interface A {
public abstract void play() ;
public abstract void beFriendly();
}
接口B
public interface B {
public abstract void play() ;
public abstract void beFriendly();
}
一个类实现多个接口@Service("weixinPay")
public class WeixinPay implements Pay{
@Overrid
public Object pay(Map map){
return "weixinpay";
}
}
接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量;
实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现;
接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现;
接口可以实现多重继承,而一个类只能继承一个超类;
扩展资料:
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
两种含义:一,Java接口,Java语言中存在的结构,有特定的语法和结构;二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做“Java接口”,后者叫做“接口”。
功能
在Java语言规范中,一个方法的特征仅包括方法的名字,参数的数目和种类,而不包括方法的返回类型,参数的名字以及所抛出来的异常。在Java编译器检查方法的重载时,会根据这些条件判断两个方法是否是重载方法。但在Java编译器检查方法的置换时,则会进一步检查两个方法(分处超类型和子类型)的返还类型和抛出的异常是否相同。
接口实现和类继承的规则不同,为了数据的安全,继承时一个类只有一个直接父类,也就是单继承,但是一个类可以实现多个接口,接口弥补了类的不能多继承缺点,继承和接口的双重设计既保持了类的数据安全也变相实现了多继承。
-
【JAVA】实现多个接口
2019-10-17 16:26:18通过动物游泳奔跑飞行来模拟实现多个接口,因为这种情况下,我们需要让一个类同时继承多个父类,这件事情在有些编程语言中可以通过多继承的方式来实现,但是JAVA中只支持单继承,一个类只能继承一个父类,但是可以...题目:
通过动物游泳奔跑飞行来模拟实现多个接口,因为这种情况下,我们需要让一个类同时继承多个父类,这件事情在有些编程语言中可以通过多继承的方式来实现,但是JAVA中只支持单继承,一个类只能继承一个父类,但是可以同时实现多个接口,这样也就可以达到类似于多继承的效果(1)
public class Animal { protected String name; public Animal(String name) { this.name = name; } }
(2)
public class Fish extends Animal implements ISwimming{ public Fish(String name) { super(name); } @Override public void swim() { System.out.println(this.name + "正在用尾巴游泳"); } }
(3)
public class Frog extends Animal implements IRunning, ISwimming { public Frog(String name) { super(name); } @Override public void run() { System.out.println(this.name + "正在往前跳"); } @Override public void swim() { System.out.println(this.name + "正在蹬腿游泳"); } }
(4)
public class Cat extends Animal implements IRunning{ public Cat(String name) { super(name); } @Override public void run() { System.out.println(this.name + " 正在用四条腿跑步"); } }
(5)
public class Duck extends Animal implements ISwimming, IRunning, IFlying { public Duck(String name) { super(name); } @Override public void fly() { System.out.println(this.name + "正在用翅膀飞"); } @Override public void run() { System.out.println(this.name + "正在用两条腿跑"); } @Override public void swim() { System.out.println(this.name + "正漂在水上"); } }
(6)
public interface IFlying { void fly(); }
public interface ISwimming { void swim(); }
public interface IRunning { void run(); }
(7)
public class Test { public static void main(String[] args) { Cat cat = new Cat("小猫"); walk(cat); Duck duck = new Duck("小鸭"); walk(duck); Fish fish = new Fish("小鱼"); swim(fish); Frog frog = new Frog("小青蛙"); walk(frog); swim(frog); } public static void walk(IRunning running) { System.out.println("我带着伙伴去散步"); running.run(); } public static void fly(IFlying flying) { System.out.println("我看见伙伴在飞"); flying.fly(); } public static void swim(ISwimming swimming) { System.out.println("我带着伙伴游泳"); swimming.swim(); } }
-
为什么Java中一个类可以实现多个接口,但只能继承一个类?
2019-12-27 09:16:14多继承会产生钻石问题(菱形继承) 类 B 和类 C 继承自类 A,且都重写了类 A 中的同一个方法 ...接口中的方法是抽象的,一个类实现可以多个接口 假设这些接口中存在相同方法(方法名与参数相同),...多继承会产生钻石问题(菱形继承)
- 类 B 和类 C 继承自类 A,且都重写了类 A 中的同一个方法
- 类 D 同时继承了类 B 和类 C
- 对于类 B、C 重写的类 A 中的方法,类 D 会继承哪一个?这里就会产生歧义
- 考虑到这种二义性问题,Java 不支持多重继承
Java 支持类实现多接口- 接口中的方法是抽象的,一个类实现可以多个接口
- 假设这些接口中存在相同方法(方法名与参数相同),在实现接口时,这个方法需要实现类来实现,并不会出现二义性的问题
从 JDK1.8 开始,接口中允许有静态方法和方法默认实现。当检测到实现类中实现的多个接口中有相同的默认已实现的方法,编译报错
PS:在JDK 1.5 上实践,接口可以多继承接口package constxiong.interview; /** * 测试继承多接口,实现相同方法 * 从 JDK1.8 开始,接口中允许有静态方法和方法默认实现 * 当检测到实现类中实现的多个接口中有相同的默认已实现的方法,编译报错 * @author ConstXiong * @date 2019-11-21 10:58:33 */ public class TestImplementsMulitInterface implements InterfaceA, InterfaceB { public void hello() { System.out.println("hello"); } } interface InterfaceA { void hello(); static void sayHello() { System.out.println("InterfaceA static: say hello"); } default void sayBye() { System.out.println("InterfaceA default: say bye"); } } interface InterfaceB { void hello(); static void sayHello() { System.out.println("InterfaceB static: say hello"); } // default void sayBye() { // System.out.println("InterfaceB default: say bye"); // } }
【Java面试题与答案】整理推荐
-
Spring一个接口多个实现类,一个实现类实现多个接口,注入方法
2019-06-26 15:32:171、一个实现类实现多个接口 例如:serviceImpl implements Interface1,Interface2 在controller中 @AutowiredInterface1 只能调用Interface1接口的方法 总结,注入单个接口,只能调用对应的接口方法 2、一个... -
java类支持多继承么?可以实现多个接口么?
2018-11-16 14:41:42java 不支持多继承,但类可以实现多个接口,间接的实现多继承,也可以通过内部类。 参考代码:MultiExtendsTest // 测试间接的实现多继承 public class MultiExtendsTest extends D implements A, B, C { @... -
接口,抽象类;类可以实现多个接口,类只能继承一个类,接口可以继承多个接口
2019-07-15 14:56:35接口 接口中的抽象方法只能是 public 类型的,并且默认即为 public abstract 类型。 -
一个类可以实现多个接口但是只能实现一个类
2019-04-10 16:05:39一个类可以实现多个接口,但是只能继承一个类 -
Java接口(继承父类并实现多个接口)
2019-04-04 21:52:452. 一个类的直接父类是唯一的,但是一个类可以同时实现多个接口。 格式: public class MyInterfaceImpl implements MyInterfaceA, MyInterfaceB { // 覆盖重写所有抽象方法 } 3. 如果实现类所实现的多个接口... -
java中接口可以实现多个接口吗?
2016-04-01 14:35:17转自:...首先,java中的接口别说实现多个接口了,一个接口也不能实现。因为接口中的方法是没有方法体的,所以不能实现任何 -
java实现多个接口 重名方法问题
2016-11-15 05:27:30但有个无论多继承还是多实现都存在的隐含问题:多个接口中有重名方法怎么办? 显然这种bug,接口编写者不会发现,只有程序员在写实现类时,ide首先就会报错。 解决方法: 实现类里写个内部类,分别实现两... -
java实现多个接口方法冲突
2016-02-19 02:07:30问题:现有接口B和C,这两个接口中均包含了方法fun(); interface B{ public double fun(); } interface C{ public void fun(); } 如果类A实现了B和C接口,那么需要如何实现才不会出错? 关键:一个类实现了两个具有... -
一个接口多个实现,指定实现类
2018-04-14 21:49:38目的:一个接口多个实现时,根据不同的条件调用不用的实现1、有如下接口public interface Pay { public Object pay(Map<String,Object> map); }2、有如下两个实现实现一:@Service("weixinPay&... -
一个接口有多个实现方法具体调用
2020-01-06 18:08:261.如果这个接口下的实现类我们都要遍历调用 可以在impl中: //DimensionDetailService为接口 @Autowired privat Map<String,DimensionDetailService> map; //然后就可以遍历调用啦 map.values().... -
Java中一个类如何实现多个接口中同名同参返回值不同的方法?
2014-07-01 03:25:40如:` class A implements Interface1,Interface2{ //这里该怎么写呢? } interface Interface1{ public void method(); } interface Interface2{ public int method(); } -
Objective C的可以多重继承么?可以实现多个接口么?
2012-11-07 09:23:34Objective C不能直接使用多重继承。cocoa中所有的类都是NSObject的子类,多重继承在这里是用protocol委托代理来实现的。 一个类可以实现多个接口。 -
jmeter一次登录实现测试多个接口测试
2019-12-05 14:57:181.http消息头管理器和httpCookie管理器都是公共变量,所以需要...3.提取session里面(引用名称:是随便起的名字,但是必须与下面shell里面的变量对应,正则表达式:response headers里面的返回值名字必须与接口返... -
一个接口存在多个实现类,动态调用不同的实现类
2019-10-09 11:34:40实现动态调用,方法有很多种,在这里记下一种我觉得比较简单的,方便以后翻阅。 接口类 package com.su.mybatis.oracle.service; public interface TestService { String firstStep(); String secondStep()... -
java 一个类怎么实现两个接口
2019-03-20 18:44:06n个接口都是使用逗号分隔 public String sayHello(String name) { return "Hello, " + name; } public String sayHi(String name) { return ... -
JAVA中implements实现多接口
2019-09-11 10:59:28JAVA中implements实现多接口 这里有一个游戏,人猿泰山。 主角是一个单独的类,这里我们主要用怪物说明接口的用法: 怪物有很多种, 按地域分:有的在天上飞,有的在地上跑,有的在水里游 按攻击方式分:有的能近... -
Java中接口可以继承多个接口
2017-11-09 10:40:13接口是常量值和方法定义的集合。接口是一种特殊的抽象类。 一.我们回忆下接口与抽象类的区别: abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制。...实现接口的一定要实现接 -
一个接口有多个实现类的处理方式
2019-11-12 14:54:39在某些特殊业务中,为了方便, 所以采用一个接口有多个实现类,但是如果不指定注入的实现类的话,就会造成启动报错: *************************** APPLICATION FAILED TO START *************************** ... -
一个接口有多个实现类,当调用接口中的方法时,如何判定用的是哪个实现类
2021-03-15 03:47:04一、简单例子:1.直接new一个实例,这样肯定知道用的哪个实例2....举个例子:A接口,A1,A2,A3实现A接口,有一个eat方法,A1:吃饭,A2:吃鱼,A3:吃肉需要得到"吃肉",那么Aa=newA3();需要得到"吃饭",那... -
java一个接口拥有多个实现类,调用指定实现类
2021-02-26 01:06:09java一个接口拥有多个实现类,调用指定实现类 -
Spring如何自动注入一个接口多个实现实例
2019-06-12 19:37:25如题所述,当一个接口被多个子类实现时,Spring框架怎样从容器中正确取出我们想要的实例呢? (定义了CommonService接口,同时有个两个子类实现了这个接口,同时两个实现类上都加了@Service注解,表明在项目启动... -
一个接口多个实现类,如何指定特定实现类进行调用
2020-12-17 17:05:22一个接口多个实现类,如何指定特定实现类进行调用示例解决方法 在写程序的时候经常会遇到 写一个接口有多个实现类,那么在调用的时候是如何去确定调用的是哪个实现类呢?接下来将为你介绍几种方式: 示例 总接口 ... -
SpringBoot中一个接口多个实现类,如何自由选择,这是一把《屠龙宝刀》
2020-10-30 09:45:30一个接口难免会有多个实现类,不同的实现类有各自的需求,如何在项目中实现根据不同项目,自由切换实现类呢? 废话不多说,直接上代码,文末有源码,直接测试 1.接口代码 package com.cj.interfaces; public ... -
Spring同一接口有多个实现类,如何注入
2019-08-03 14:51:41最近写了前台一个管理模块,后来也是我来写,采用四层架构,在定义接口时,基本是一个接口对应一个实现类,使用@Autowired注解,但我想如果有多个实现类,如何注解,来梳理一下 举例说明: 1、接口:IAnimal 2、实现... -
设计模式-代理类proxy:一个接口多个实现类(基于spring框架)
2016-08-30 17:32:05根据前台返回的不同参数,选择一个接口不同的实现类来实现不同业务逻辑,我们用到了proxy代理类。 首先是spring.xml 配置文件 如下:(proxy 代理类 ××ServiceImpl实现类) 代理类代码 ... -
spring注解识别一个接口的多个实现类方法
2017-07-12 19:26:08spring注解识别一个接口的多个实现类方法,在引用类中匹配到正确的实现类接口如下:public interface Filter { public String doFilter(String param); }接口实现类:public class TimeFilter implements Filter {...