Java—抽象类、接口

抽象类

抽象类概念

一般作为父类存在,是若干个子类中提取出来的相同内容。

抽象:不具体的、模糊的、不明确的,只是说明存在给行为,但未说具体怎样做,怎样执行。

例:狮子“嗷~~”的叫,小鸡“咯咯咯“的叫。叫这个行为就是一个抽象类。

public class liti {
    public static void main(String[] args){
        shizi c = new shizi();
        c.jiao();
    }

}
    abstract class dongwujiao{
    public  abstract void jiao();
    }
    class shizi extends dongwujiao{
      @Override
        public void jiao(){
            System.out.println("┗|`O′|┛ 嗷~~");
        }
        class maomi extends dongwujiao{
           @Override
            public void jiao() {
                System.out.println("喵喵");
            }
        }
    }

抽象函数

指不确定具体执行内容的函数,采用abstract关键字对函数进行标识。

注:具体执行内容由子类进行执行;

       抽象类由于是不具体的,所以不能进行创建对象。

抽象类和一般类的区别

  唯一的区别就是抽象类中包含了抽象函数而已,也不能创建对象,剩下的和一般类一样
  对于抽象类而言,也可以由构造函数,成员变量,成员函数
  抽象类的成员变量和成员函数,被当成父类留给子类使用。

 与abstract关键字不能共存的关键字

final关键字

   在抽象函数上不行,抽象函数就等着被子类重写,与final的含义冲突
   在抽象类上不行,抽象类一般是作为父类存在,如果没有子类的话,该类的定义就没有意义

private关键字

   在抽象函数上不行,抽象函数就等着被子类重写,但是private表示能被继承但无法访问

static关键字

在抽象函数上不行,静态函数可以直接被类调用,必须是具体的内容。静态优先对象加载进方法区,此时和子类无任何关系。

  抽象类的子类分为两种

 1.继承抽象类,但不重写抽象函数,继续声明为抽象类
 2.继承抽象类,重写抽象函数。

 抽象类特点

 抽象类和抽象函数都需要被abstract关键字修饰,抽象函数一定在抽象类中
 抽象类不能创建对象
 子类只有重写了父类所有的抽象函数之后,才能创建对象,否则本身也是一个抽象类

接口

接口其实就是抽象类的另外一种表现形式
如果某一个抽象类中的所有方法都是抽象函数时,那么就可以用接口这个形式来表现

 abstract class AbstractTest {
        public abstract void showA();
        public abstract void showB();
        public abstract void showC();
        public abstract void showD();
    }
    //AbstractTest另外一种表现形式:
    interface AbstractTestInterFace {
        public abstract void showA();
        public abstract void showB();
        public abstract void showC();
        public abstract void showD();
    }

接口特有属性

1.接口中定义的所有变量,都是public static final这三个关键字进行修饰的全局静态常量,但是public static final 这三个关键字可以在代码中省略,但并不代表没有。
2.接口中定义的所有函数,都是由public abstract 这两个关键字进行修饰的全局抽象函数,public abstract 这两个关键字也可以省略,但也并不代表没有。

3.接口不能创建对象,接口虽然可以表示类,但接口并不是一个类,其没有与类相关的性质。

4.在Java中,类与类时单继承关系,接口之间是多继承关系。

   interface InterFather {
            public void show();
        }
        interface InterMother {
            public void show();
        }
        interface InterSon extends InterFather, InterMother{
            public void show();
        }
        /*
        你的爸爸希望你过的好 - 有没有具体说怎么过的好?
        你的妈妈希望你过的好 - 有没有具体说怎么过的好?
        你也希望你自己过的好 - 有没有具体说怎么过的好?
        只有函数的声明,并没有函数的执行体,所以不会产生调用分歧问题 
        */

类与接口之间是多实现关系、

 interface InterFather {
            public void show();
        }
        interface InterMother {
            public void show();
        }
        interface InterSon extends InterFather, InterMother{
            public void show();
        }
        class Me implements InterFather, InterMother, InterSon{
            @Override
            public void show() {

            }
        }

 接口与抽象类的区别

相同点:
    都是位于继承的顶端,用于被其他子类实现或继承
    都不能创建对象
    都包含了抽象函数,其子类都必须重写这些抽象函数(如果不重写 就抽象类)
 不同点:
    抽象类为部分方法提供实现,避免子类重复实现这些方法(可以包含一般的成员函数用于继承)
     接口只能包含抽象函数(JDK1.8及其以后 接口可以包含一般函数 静态函数 成员函数)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值