大数据第十二天

抽象abstract类概述

Java中使用“抽象方法”来解决这个问题,抽象方法的意思就是:只规定方法的签名,并不提供方法的实现,即:没有方法体。

Java规定:只有方法签名,没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。

样例:

abstract class Animal{

    public abstract void move();

}

抽象类/方法特点

 

抽象类和抽象方法必须用abstract关键字修饰

  • 抽象类定义

    abstract class 类名 {}

  • 抽象方法定义,在返回值前,或修饰符前加上abstract关键字
  • 方法没有方法体,即:没有{}

abstract public void eat();

    public abstract void eat();

 

抽象类不一定有抽象方法,有抽象方法的类一定是抽象类

 

抽象类完全可以有成员变量和非抽象成员方法

 

抽象类不能实例化

抽象类的实例化按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态

抽象类可以有构造方法,抽象方法是用来被子类调用的,程序员不能调用

 

抽象类的子类--使用extends

  • 要么是抽象类,不完全实现其父类的抽象方法
  • 要么重写抽象类中的所有抽象方法,这个子类就是一个完全的实现类了,所以可以用来实例化对象

 

抽象类,抽象方法定义时的非法组合

  • private abstract

抽象方法依靠子类去实现,但是私有方法在类外就不能访问,也就无法实现

  • final abstract

final修饰的方法不能被重写,而抽象方法就是需要子类实现,矛盾

  • static abstract

抽象方法在本类中是没有方法体的,使用类名调用的时候调用的是没有方法体的方法,无作用

总结,在abstract类中:

成员变量

  • 可以是变量,也可以是常量(final)

构造方法

  • 有构造方法,但是不能实例化(不能被显式调用,但JVM可以隐含调用)

    作用是用于子类访问抽象类数据的初始化

成员方法

  • 可以有抽象方法 限定子类必须完成某些动作
  • 也可以有非抽象方法,用来提高代码复用性,子类可以继承

接口interface的引入

接口特点

 

接口用关键字interface表示

  • 格式:interface 接口名 {}    //不能使用class关键字了

 

类实现接口用implements关键字

  • 格式:class 类名 implements 接口名 {}

 

接口没有构造方法,即:接口不能实例化

  • 按照多态的方式,由具体的子类实例化。其实这也是多态的一种,接口多态。

 

接口的子类

  • 可以是抽象类,用implements关键字,

abstract class A implements ITest{}    //抽象类和接口之间用实现

  • 或者还是一个接口,用extends关键字

interface A extends ITest{}        //接口和接口之间用继承

  • 是一个实现类,实现接口中的所有抽象方法,用implements关键字

    class B implements ITest{...}          //实现类和接口之间用实现

 

 

 

小结:

    只有接口和接口之间使用的是extends关键字,抽象类和接口之间,实现类和接口之间都是用的implements关键字

 

演示接口常规用法:

1.接口不能实例化对象

2.子类如果是实现类的话,就必须实现接口中定义的所有抽象方法

3.子类如果不完全实现接口中的抽象方法,那子类就是抽象类

4.接口和接口之间可以继承--extends

接口成员特点

成员变量

  • 只能是常量
  • 默认修饰符 public static final,其中的任何一个都可以省略,也可以全都省略

构造方法

没有,因为接口主要是扩展功能的,而没有具体存在

成员方法

  • 只能是抽象方法
  • 默认修饰符 public abstract,可以省略其中之一,或者都省略。

类与类,类与接口,接口与接口的关系

普通类与普通类--extends

  • 继承关系,只能单继承,但是可以多层继承

普通类与抽象类--extends

  • 继承关系,只能单继承,但是可以多层继承

普通类与接口,抽象类与接口--implements

  • 实现关系,可以单实现,也可以多实现。还可以在继承一个类的同时实现多个接口
  • 此时应注意:extends 写在前,implements写在后

接口与接口--extends

  • 继承关系,可以单继承,也可以多继承

抽象类和接口的区别

定义时使用的关键字

  • 抽象类  abstract
  • 接口    interface

 

成员区别

  • 抽象类     变量,常量都可以有;抽象方法,非抽象方法都可以有;可以有构造方法
  • 接口       只有常量;只有抽象方法;没有构造方法

关系区别

  • 类与类            继承,单继承,多层继承
  • 普通类与接口       实现,单实现或多实现implements
  • 抽象类与接口       实现,单实现,多实现abstract class A implements IA,IB
  • 普通类与抽象类     继承,并实现全部抽象方法extends
  • 接口与接口         继承,单继承,多继承extends

总结:

在接口的各种关系中,只有接口和接口之间用的是继承,其余的和接口之间都是实现关系;

 

1、抽样方式定义格式,抽象方法定义时修饰符有哪些非法组合?

private abstract

抽象方法依靠子类去实现,但是私有方法在类外就不能访问,也就无法实现。

final abstract

final修饰的方法不能被重写,而抽样方法就是需要子类实现,矛盾。

static abstract

抽样方法在本类中是没有方法体的,使用类名调用的时候调用的是没有方法体的方法,无作用。

2、抽象类定义格式

抽象类和抽象方法必须用abstract关键字修饰

抽象类定义

abstract class 类名{}

抽象方法定义,在返回值前,或修饰符前加上abstract关键字

方法没有方法体,即:没有{}

abstract public void eat();

public abstract void eat();

3、抽象类是否必须有抽象方法?

抽象类不一定有抽象方法,有抽象方法的类一定是抽象类。

抽象类完全可以有成员变量和非抽象成员方法。

4、抽象类中成员变量和成员方法有什么特点?

成员变量:可以是变量,也可以是常量(final);

成员方法:可以有抽象方法  限定子类必须完成某些动作;

     也可以有非抽象方法,用来提高代码复用性,子类可以继承。

5、接口中成员变量和成员方法的特点?

成员变量:只能是常量;默认修饰符public static final,其中的任何一个都可以省略,也可以全都省略。

成员方法:只能是抽象方法;默认修饰符public abstract,可以省略其中之一,或者都省略。

6、接口与接口,接口与抽象类,接口与实现类的关系,分别使用什么关键字?

接口与接口——extends    继承关系,可以单继承,也可以多继承。

接口与抽象类——implements  实现关系,可以单实现,也可以多实现。还可以在继承一个类的同时实现多个接口。

                此时应注意:extends写在前,implements写在后

7、接口中成员变量默认的修饰符

public static final

 

posted @ 2017-03-26 23:16  这就是飞扬的感觉  阅读(83)  评论(0编辑  收藏  举报