接口

可以理解为一种特殊的类,里面全部是由全局常量(static final)和公共的抽象方法所组成

接口的定义格式

接口的数据成员,只允许被public, static, final修饰。 接口的方法成员,只允许被public, abstract修饰。

Interface 接口名称{

  private static final int var1=1;  //error

  public static final int var2 = 2;

  public abstract void fun1();

  private abstract int fun2();    //error.

}

接口中的数据成员都为static final类型,必须进行初始化,且接口的数据成员的值不能被修改,允许省略static, final关键字。 接口中的方法必须是“抽象方法”,不能有方法体,允许省略public及abstract关键字

public interface A{

  int num;    //error. 没初始化

  String name = “test”;

  public void getName( ) {……}  //error.不允许定义方法体

}

接口的实现 接口不能用new运算符直接产生对象,必须利用其特性设计新的类,再用新类来创建对象 与抽象类一样,接口要使用也必须通过子类,子类通过implements关键字实现接口。 实现格式: class 子类名称 implements 接口A, 接口B,….{ //子类成员声明 } 接口的使用必须通过子类,子类必须覆写全部抽象方法。一个子类虽然只能继承于一个父类,但可以同时实现多个接口。

interface A{

public String name = “小明”;

public void print();

public String getName();

}

interface B{

  public void setName();

}

class C implements A, B{

  public void print( ) { ……};

  public  String getName( ) {……};

  public  void setName( ) {……};

}

必须实现接口中的所有方法,否则,实现接口的类将带有抽象方法,因此成为抽象类。 在覆写来自接口的方法时,必须声明成public。

class C implements A, B{

  //public void print( ) { ……};     //没覆写print方法,编译不过。

  public  String getName( ) {……};

  public  void setName( ) {……};

}

对象转型

对象可以被转型为其所属类实现的接口类型。 接口不可通过new实例化,但可以声明接口变量。

public class Test implements A{

  intidx = 1;

  public void print(){

    System.out.println(“”)

  }

  public String getName(){       }

public static void main(String []agrs){

    Test test = new Test();

  A a = (A)test;   //对象转型为接口类型

  System.out.println(a.name);    //输出name的值

   a.idx = 2;   //error. idx属于test,在接口A中不存在

  a.print();     //执行Test的print方法。

  }

}

继承抽象类实现接口

一个子类可以同时继承抽象类和实现接口 格式如下: class 子类 extends 抽象类 implements 接口A,接口B,……{  }

接口的继承

接口不能继承一个抽象类,却可以通过extends同时继承于多个接口。

public abstract class base {……}

interface B {……}

interface C{……} i

nterface A extends base{……}    //错误

interface A extends B, C{ ……}    //正确

接口与继承的区别

No.

区别

抽象类

接口

1.定义:

以abstract声明,抽象方法可有可无。

以interface声明,由静态常量和抽象方法组成。

2.组成:

构造方法、抽象方法、普通方法、常量、变量。

静态常量、抽象方法。

3.使用:

子类继承抽象类(extends)。

子类实现接口(implements)。

4.关系:

抽象类可以实现多个接口。

接口不能继承抽象类,但允许继承多个接口。

5.对象:

都通过对象的多态性产生实例化对象。

6.局限:

抽象类有单继承的局限。

接口可以实现多重继承。

7.选择:

如果抽象类和接口都可以使用的话,优先使用接口,可以避免单继承的局限。

多态

是指不同类型的对象可以响应相同的消息,从相同的基类派生出来的多个类型可被当作同一种类型对待,可对这些不同的类型进行同样的处理,由于多态性,这些不同派生类对象响应同一方法时的行为是有所差别的 ◦

例如

所有的Object类的对象都响应toString()方法

多态性在java中主要有以下两种体现:

方法的重载与覆写。

对象的多态性。

对象的多态性

对象的多态性主要分为以下两种类型:

1.向上转型:子类对象->父类对象

对于向上转型,程序会自动完成。

//BaseClass为父类,DerivedClass为BaseClass的派生类

BaseClass bc = new DerivedClass();   //隐式转型。

2.向下转型:父类对象->子类对象

对于向下转型,必须明确指明要转型的子类类型。

BaseClass bc = new DerivedClass();   //先向上转型

DerivedClass dc = (DerivedClass)bc;

public class A{

  String name = “A”;

  public void fun1(){

    System.out.println(“A->fun1”);

  }

  public void fun2(){

    System.out.println(“A->fun2”);

  }

}

public class B extends A{

String name = “B”;

public void fun1(){

System.out.println(“B->fun1”);

}

public void fun3(){

System.out.println(“B->fun3”);

}

}

向上转型:

public class Demo{

public static void main(String args[]){

A a = new B( );

a.fun1();     //输出什么?  B->fun1

a.fun2();     //输出什么?  A->fun2

a.fun3();     //error. A中没定义fun3方法

System.out.println(a.name);   //输出什么?

}

}

向下转型

public class Demo{

public static void main(String args[]){

//B b = (B)new A( );   //强制转型,运行后抛出异常

A a = new B();

B b = (B)a;   //向下转型

b.fun1();     //输出什么? A->fun1

b.fun2();     //输出什么? A->fun2

b.fun3();     //输出什么? B->fun3

}

}

要想产生对象的向下转型,则必须先产生一个向上的转型关系, A a = new B(); 表示建立关系。

多态的目的

所有的对象都可被转型为相同的类型,响应相同的消息 使代码变得简单且容易理解 使程序具有很好的“扩展性”

应用实例

技术基础 ◦向上转型:一个父类的引用变量可以指向不同的子类对象。 ◦动态绑定:运行时根据父类引用变量所指对象的实际类型执行相应的子类方法,从而实现多态性。 例子1:司机开车 public abstract class Driver{

public Driver( ) { }

public abstract void drives( );

}

public class FemaleDriver extends Driver {

public FemaleDriver( ) { }

public void drives( ) {

System.out.println("A Female driver drives a vehicle.");

}

}

public class MaleDriver extends Driver {

public MaleDriver( ) { }

public void drives( ) {

System.out.println("A Male driver drives a vehicle.");

}

}

public class Test{

public static void main(String [ ] args){

Driver a = new FemaleDriver( );

Driver b = new MaleDriver( );

a.drives( );

b.drives( );

}

}

输出结果:A Female driver drives a vehicle.

A Male driver drives a vehicle.

例子2——司机开什么车 不利用对象多态性的做法

public class MaleDriver extends Driver {

public MaleDriver( ) { }

public void drivesBus( ) {

System.out.println("A Male driver drives a bus.");

}

public void drivesCar( ){

System.out.println("A Male driver drives a car.");

}

public void drivesTruck( ){

System.out.println("A Male driver drives a truck.");

}

……

}

利用对象多态性的做法

public abstract class Vehicle{

  public void drivedByFemale( );

  public void drivedByMale();

}

public class Bus extends Vehicle{

  public void drivedByFemale( ){

    System.out.println("A Female driver drives a bus.");

  }

  public void drivedByMale(){

    System.out.println("A Male driver drives a bus.");

  }

}

public class MaleDriver extends Driver {

  public void drives(Vehicle  v){

    v. drivedByMale();

  }

}

public class Test{

  public static void main(){

    Vehicle bus = new Bus();

    Driver male = new MaleDriver();

    male.drives(bus);

  }

}

输出结果: A Male driver drives a bus

Java接口与多态的更多相关文章

  1. Java 接口和多态

    接口 1.1 接口的概述 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样 ...

  2. java 接口实现多态

    package unit4; import java.awt.Graphics; public interface Shape { void drowme(Graphics g); double ar ...

  3. Java 接口和多态练习

    我们鼠标和键盘实现USB接口,那么我们鼠标和键盘就变成了USB设备,这时候我们就可以把它放到笔记本电脑里面去用 package com.biggw.day10.demo07; /** * @autho ...

  4. Java基础学习笔记八 Java基础语法之接口和多态

    接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...

  5. Java开发知识之Java的继承多态跟接口*

    Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...

  6. Java 基础 接口和多态

    接口 接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的 ...

  7. Java 面向对象之接口、多态

    01接口的概念 A:接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成 ...

  8. Java学习笔记——继承、接口、多态

    浮点数的运算需要注意的问题: BigDecimal operand1 = new BigDecimal("1.0"); BigDecimal operand2 = new BigD ...

  9. java抽象类、多态、接口

    抽象类 抽象类的产生 当编写一个类时,我们往往会为该类定义一些方法,这些方法是用来描述该类的功能具体实现方式,那么这些方法都有具体的方法体. 但是有的时候,某个父类只是知道子类应该包含怎么样的方法,但 ...

随机推荐

  1. linux下非root用户获得/dev/ttyUSB0的读写权限

    首先查看/dev/ttyUSB0的权限属性,在终端输入: ll /dev/ttyUSB0 teashaw@xiaopeiqing.com:~$ ll /dev/ttyUSB0 crw-rw—- 1 r ...

  2. android httpclient 上传图片

    需要依赖  httpmime.jar /** * 上传图片 * * @param url * 上传地址 * @param filepath * 图片路径 * @return */ public Str ...

  3. emacs窗口半透明

    转自 http://blog.csdn.net/dsjlzh/article/details/7804733 ;; transform window;; Anchor: March Liu (刘鑫) ...

  4. CSS3 pointer-events:none应用举例及扩展

    一.pointer-events:none是? pointer-events是CSS3中又一冉冉的属性,其支持的值牛毛般多,不过大多都与SVG相关,我们可以不用理会.当下,对于偶们来讲,与SVG划开界 ...

  5. 腾讯云AI应用产品总监王磊:AI 在传统产业的最佳实践

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 背景:5月23-24日,以"焕启"为主题的腾讯"云+未来"峰会在广州召开,广东省各级政府机构领导.海 ...

  6. Shiro与Spring、Springmvc的整合

    1.在web.xml中配置Shiro的filter 在web系统中,shiro也通过filter进行拦截.filter拦截后将操作权交给spring中配置的filterChain(过虑链儿) shir ...

  7. HDU 5700——区间交——————【线段树+枚举】

    区间交 Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...

  8. js 表格合并单元格

    5列  根据需要可添加 或 删除 strOneTemp  strTwoTemp  strThreeTemp  strFourTemp  strFiveTemp //合并单元格  this.mergeC ...

  9. 关于利用MQ实现分布式事务的想法【转】

    转自:https://www.jianshu.com/p/bafb09954f18 假设:消息服务不丢消息 场景 服务A 服务B 服务C 消息服务Q 伪代码 服务A中 transaction{ A本地 ...

  10. iis添加共享目录为虚拟目录

    注意物理路径处不能直接选择映射成的本地盘符!!!