抽象类和接口的差别

抽象类

定义

在Java面向对象当中,所有的对象都是用过类进行描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类没有包含足够多的信息来描述一个具体的对象,这样的类就是抽象类。

当定义一个类时,常常需要定义一些成员方法描述类的行为特征,但有时这些方法的实现方式是无法确定的。例如,在定义Animal类时,shout( )方法用于描述动物的叫声,但是不同动物的叫声是不同的,因此在shout( )方法中无法准确地描述动物的叫声。

抽象方法以及抽象类的实现方式

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

abstract class 类名 {}

实例

abstract  class  Graphgics{

    public abstract void draw();

}

 class  Cycle extends  Graphgics {

     @Override

     public void draw() {

     }

 }

class  Flower extends  Graphgics {

    @Override

    public void draw() {

    }

}

public class TestYang {

     public static  void drawMap(Graphgics Graphgics){

         Graphgics.draw();

     }

    public static void main (String[] args){

       drawMap(new Cycle());

       drawMap(new Flower());

    }

}

接口

定义

在软件工程中,接口泛指供别人调用的方法。在Java中接口是一个抽象类型,比抽象类更加抽象,是抽象方法的集合。一个类通过继承接口的方式,从而继承接口的抽象方法。从定义上看,接口只是一个集合,并不是类。类描述了属性和方法,而接口只包含方法(未实现的方法)和常量。

代码实现方式

public interface 接口名称 {

//声明常量

//抽象方法

}

实例

public interface Jumpping {

    public abstract void jump();

}

public abstract class Animal {

    private String name;

    private int age;

    public Animal() {

    }

    public Animal(String name, int age) {

        this.name = name;

        this.age = age;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

    public abstract void eat();

}

public class Dog extends Animal implements Jumpping{

    public Dog() {

    }

    public Dog(String name, int age) {

        super(name, age);

    }

    @Override

    public void eat() {

        System.out.println("狗吃骨头");

    }

    @Override

    public void jump() {

        System.out.println("狗可以跳高了");

    }

}

public class AnimalDemo {

    public static void main(String[] args) {

        Animal a2=new Dog("旺仔",4);

        System.out.println(a2.getName()+","+a2.getAge());

        a2.eat();

        Jumpping j2=new Dog();

        j2.jump();

    }

}

二者区别

 

二者相同点

1、都可以被继承

2、都不能被实例化

3、都可以包含方法声明

4、派生类必须实现未实现的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值