抽象类、接口和普通类的区别

先说普通类,大家比较熟悉。

一般普通类包含有:

  1. 成员变量
  2. 静态成员变量
  3. 普通方法
  4. 静态方法
  5. 局部变量
  6. 构造方法
  7. set/get 方法等

在说一下抽象类和接口

思考一个问题:既然已经有了普通类,为什么要有抽象类和接口呢?

java是面像对象编程,抽象类的目的,就是将一个事物抽象成为一个对象,便于我们理解和开发。

比如,这个世界由男人和女人构成,本质都是人类;

因此我抽象一个人类作为抽象类,抽取二者共同的一些特点;比如:说话和写字都是我们人类独有的,区别于其他动物

记住:抽象类重生的目的,抽取公共的特性,方便子类继承和实现

 

而男人和女人又有不同,但是都具备人类的共同点,于是继承Human抽象类:

并添加了各自的特有特性,而且公共特点如果有变化,我可以直接修改父类,子类直接继承就好,不必男女子类都去修改,便于维护,逻辑清楚简单。

接口:定义了人类的行为,对行为的抽象

public class Man extends Human implements Behavior{

    @Override
    public void speak() {
        super.speak();
        System.out.println("男人的嘴,骗人的鬼");
    }

    @Override
    public void writeWord() {
        super.writeWord();
        System.out.println("书法大家。。。");
    }

    @Override
    public void barbecue() {
        System.out.println("吃大羊腰子");
    }

    @Override
    public  void daMaJiang(){
        System.out.println("三缺一啊");
    };

    //特性方法
    public void daLie(){
        System.out.println("996赚钱养家");
    }

    @Override
    public void eat() {

    }

    @Override
    public void sleep() {

    }

    @Override
    public void daDouDou() {

    }
}
public class Woman extends Human implements Behavior{

    @Override
    public void speak() {
        super.speak();
        System.out.println("女人的嘴,樱桃小口");
    }

    @Override
    public void writeWord() {
        super.writeWord();
        System.out.println("字迹娟秀");
    }

    @Override
    public void barbecue() {
        System.out.println("吃鸡脖子");
    }

    @Override
    public void daMaJiang(){
        System.out.println("三缺一啊");
    };

    //特有方法
    public void guangJie(){
        System.out.println("外出购物,貌美如花");
    }

    @Override
    public void eat() {

    }

    @Override
    public void sleep() {

    }

    @Override
    public void daDouDou() {

    }
}

抽象类展示人类区别其他生物本身的特点,接口展示人类行为的共同点;

抽象类和接口的产生,目的都是为了让子类去实现,实现代码的复用,体现了继承的特点;

对比:

     对比普通类

  1. 从编码角度上来讲:
    1. 抽象类在定义上,含有abstract关键字
    2. 抽象类不能被直接实例化
    3. 其他都一样
  2. 从使用角度上来讲(目的是方便子类继承父类):
    1. 方法不能用static,final,private关键字,方法不能被子类,但可以使用
    2. 抽象方法含有抽象类,也可以不含有,如果子类不能实现父类抽象方法,那么子类一定要是抽象类
    3. 可以有构造方法,但是不能被继承。可以被子类super()方法调用。

接口:

  1. 声明方法,但是不用有方法体。
  2. 若接口中方法或变量没有写public,static,final / public,abstract ,会自动补齐 。
  3. 接口中的成员都是共有的。
  4. 一个类可以实现多个接口,一个接口不能继承其它的类,但是可以继承别的接口,而且可以多继承。
  5. 接口不能被实例化
  6. 在java开发中,我们经常把常用的变量,定义在接口中,作为全局变量使用,访问形式:接口名.变量名。
  7. 一个重要的原则:当一个类实现了一个接口,要求该类把这个接口的所有方法全部实现

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值