Java中的抽象类和接口

抽象类

    就是一个使用abstract修饰的类

//格式
abstract class 类名{
    //属性
    //方法
}
    抽象类里面可以有抽象方法,也可以没有.(一般都是有的,因为这是它的作用)

    反之,抽象方法是一定在抽象类或接口里面的,不能放在普通类中.

    抽象方法就是用abstract修饰的方法

//抽象方法里面什么都不写,直接;结束,内容是留给子类重写的
abstract class 类名{
    abstract 返回类型 方法名(参数列表);
}

抽象的使用
    通过继承抽象类的方法使用抽象类.
    当继承抽象类时,子类必须重写抽象类中所有的抽象函数.
    ps: 多重继承时,必须把所有抽象函数重写.
    (也就是最下面的实现类来把还未有方法体的抽象方法重写)
    (作用:多人开发时,防止遗漏某些功能)

注意事项:
  1. 抽象类不能创建对象.
  2. 抽象类中,可以有构造方法.
  3. 抽象类中,不一定含有抽象方法,但抽象方法一定在抽象类或接口中.
  4. 抽象类的子类(最下面的倒霉蛋?),必须重写父类中的所有抽象方法

接口

    java中的一种引用数据类型,是方法的集合.(多个方法丢在一个地方)

    主要作用:扩展java类的功能,定义额外的功能.(ps:父类类似创建角色的模板,接口类似于角色的装备.)

接口内部主要封装方法.
    抽象方法(jdk7以前)
    默认方法(jdk8)
    静态方法(jdk8)
    私有方法(jdk9)
接口的定义:
   使用interface定义
interface 接口名{
   //方法的集合
}

publice interface 接口名称{
    //默认方法
    //抽象方法
    //静态方法
    //私有方法
}

(接口里面并不能存放变量,只能存放常量,如果你在里面定义了变量,会默认添加public static final 变为常量)

(常量在Java中一般软性规定使用全大写的名字,如: PI , SIZE)


接口的使用:
    接口不能创建对象,但可以被实现implements.
    一个实现接口的类,需要实现接口的所有抽象方法(类似抽象类)
    如果是抽象类实现接口,不需要实现所有接口.
interface A{
   public abstract void show();
   public abstract void tell();
}
//如果是抽象类实现接口,可以不用把方法全部重写
//和抽象类差不多,都是实现类需要把抽象方法重写.
abstract class B implements A{
   public void show(){
       System.out.pringln("hello world!");
   }
}
//实现类重写所有抽象方法
class C implements A{
    public void tell(){
       System.out.println("hello tell");
    }
    public void show(){
       System.out.println("hello show");
    }
}

   


在接口里面定义默认方法和静态方法 
    默认方法:使用 default 修饰,不可省略,供子类调用或重写
          (默认方法里面要有方法体)
    静态方法:使用 static 修饰, 可供接口直接调用
          (静态方法可以为接口中的其他方法所用,但不能直接给其实现类使用)

类与接口的关系
    类实现接口,使用关键字implements

非抽象类实现接口:
  1. 必须重写接口中的所有抽象方法
  2. 继承接口的默认方法,可以直接调用,也可以重写
    //格式
    class 类名 implememts 接口名{
         //重写接口中的抽象方法(必须)
        //重写接口中的默认方法(可选)
    }

静态方法的使用:
  静态方法与.class文件相关,只能使用 接口名调用,不可以通过实现类的类名或实现类的对象调用.
//静态方法的调用方式
接口名.静态方法();
  静态方法无法重写.

优先级:
  如果父类及接口默认方法都有相同的名字, 优先执行父类的方法
(ps:抽象类是公司里的董事长,接口是兼职工作的老板,里面的抽象方法就是领导规划的工作,作为最下层继承或实现的类就是员工,必须要重写里面所有还没有方法体的抽象方法,就是做好工作?当工作冲突时(抽象方法重名时),先以抽象类为准?)  


接口的私有方法:
  1. 私有方法:只有 默认方法可以调用
  2. 私有的静态方法: 默认方法和静态方法可以调用
ps:私有的方法是对默认方法和静态方法的补充,为了封装它们的重复代码(jdk1.9后才有的,需要注意)

接口的多实现与多继承:
  在继承中,一个 只能继承一个父类.而一个 可以实现多个接口.
  (类似父亲只有一个,但你的爱好却不止一个.)
//多实现的格式  查api的时候 [ 内容 ] 在java一般表示可选择的意思
class 类名 [extends 父类] implements 接口1,接口2,接口3...{
    //重写的抽象方法
    //重写接口中的默认方法(如果实现的接口中有默认方法重名的情况下,必须重写方法,如果不重名,则可选择不重写,也可选择重写)
}

//一个接口继承多个接口,如果父接口中的默认方法有重名,那么子接口必须重写一次和上面的实现多个接口类似
interface 接口名 extends 接口1,接口2,接口3...{
    //父接口里面的默认方法重名的情况下必须重写
}

抽象方法:
    接口中,实现类必须重写所有的抽象方法, 如果重名(只需重写一次)
    接口中,方法没有注明,默认为抽象方法
interface InterfaceKind{
    //默认添加public abstract
    void 方法名();
    //等效于 public abstract void 方法名();
}
ps:
  子接口重写默认方法时, default可以保留
  实现类重写默认方法时, default不可保留(因为类里面是没 default关键字的)

接口的特点:
  1. 接口中,无法定义成员变量,只能创建常量
    //格式: 例如圆周率
    public static final double PI = 3.14;
    //如果是定义double PI
    //则会默认加上public static final
    //定义常量,所有的名字都是大写,用2个单词或以上用_连接
    
  1. 接口中,没有构造方法,无法创建对象
  2. 接口中,没有静态代码块
    //静态代码块,存在于类中,与类的属性和方法是同一级别的
    //静态代码块,存在于内存的方法区中,是比类的构造函数更加优先调用,且只调用一次,和构造方法类似
    static{
        //方法体
    }

(以上均为本人观点,如果有不同的意见,欢迎大家在下面留言吐槽!)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值