java入门--抽象和接口

来源:互联网 发布:打印机显示网络 编辑:程序博客网 时间:2024/05/22 15:04

一、抽象方法:我们从具有相同属性和行为的子类中抽取出来形成一个共同的父类。我们可以定义共同的属性,但是对于子类共同的方法,我们没有一个同一的描述(也就是说父类没有办法描述每一个子类的行为具体表现形式属性,但是子类的行为都具有共同的行为属性)
抽象方法的定义格式如下:

abstract public 返回值类型 方法名();

如:动物的叫声,狗的叫声是汪汪、猫的叫声是喵喵,但是都具备叫这个功能。通过将猫和狗的“叫”的这个方法(猫和狗之间的共同的协议抽象为一个抽象的方法)

  1. 第一步
class Animal{    String name;    public abstract void sound();} 

注意上面只是第一步,通过将动物“叫”的方法抽象出一个抽象方法,java中同时规定只要一个类中有一个abstract方法,那么这个类就要声明成一个abstract类。

  1. 第二步
abstract class Animal{    String name;    public abstract void sound();} 

二、抽象方法和抽象类之间的关系

  1. 一个abstract类可能没有声明任何的abstract方法,也可能生命了部分的abstract方法

  2. 一个abstract类中如果包含abstract方法,那么这个类一定要声明为一个abstract类

三、继承中的抽象

  1. 当父类是抽象的时候,子类如果不是抽象类,那么在子类在继承父类的所有属性和方法的同时,如果子类没有将父类的抽象方法进行抽象,那么子类任然是一个abstract类
  2. 如果父类是抽象的,一级子类也是抽象的,二级子类不抽象,那么二级子类必须实现它所继承所有父类和一级子类的抽象方法,否则二级子类仍是一个abstract类,但是这里的一级子类并不需要实现父类所有的abstract方法。

示例:

abstract class Animal{    String name;    public abstract void sound();    public abstract void eat();}abstract class Canine extends Animal{    public abstract void toe();}class Poppy{    public void sound()    {        System.out.println("汪汪");    }    public void eat()    {        System.out.println("shit");    }    public void toe()    {        System.out.println("五趾");    }}

四、抽象和对象实例化

对于一个抽象类是不能实例化的,如果我们要进行实例化,我们必须声明一个子类将父类的所有抽象方法实现,对子类声明一个对象实例化。

class Test1{    public static void main(String[] args)    {        Animal a = new Animal();    }}

这里Animal是一个abstract类,我们在main函数中对其声明之后,系统编译出现下满的错误

Animal是抽象的:无法实例化Animal a = new Animal();

五、接口

当众多子类继承同一个父类,父类中包含的属性和方法是子类共同制定的一个协议,但是在这众多的子类中有一子类又有着共同的行为属性。(这个方法不能用一个统一的语句表示,因为子类的行为属性相同,但是行为具体表现形式不同。具体的例子就是猫和狗都会叫这个共同的行为属性,但是表现形式不同。)
这时我们不能将这些部分拥有相同行为属性的方法写进父类的abstract方法中,此时我们用一个完全的抽象类来实现部分子类拥有的相同行为属性。
接口的标准形式

Interface 接口名

接口中是一个完全的抽象类,对于接口中的方法,继承接口的子类(如果我们不想将直接继承的子类全部定义为abstract类)需要将接口中的全部方法进行实现。

六、接口中的继承关系
在子类继承父类时我们一个子类有且只能继承一个父类,但是在继承中,一个类可以在extends一个父类的同时implement多个接口,具体的形式如下:

class A extends B implement C,D
原创粉丝点击