java学习——抽象类与接口

目录

一、抽象类

1、概念

2、抽象类应用场景

二、接口

1、概念

2、接口定义

3、接口继承

4、接口实现

5、接口应用场景

三、总结

抽象类和接口的区别


一、抽象类

1、概念

抽象类是被声明为abstract的类,它可能包含也可能不包含抽象方法,抽象类不能被实例化,但是可以被子类化(也就是可以被继承)。

抽象类定义语法

  public abstract class 类名 {

       //定义一个抽象类

}

抽象方法定义语法

 访问修饰符 abstract 返回值类型 方法名 ( 参数列表 ) ;

2、抽象类应用场景

一般来说,描述抽象的事物就要使用抽象类,比如动物、设备、几何图形等。

代码解读

package com.oxi.abstractclass;

public abstract class Animal {

    //抽象方法是没有方法体的,因为方法体就是表示知道具体怎么去做这件事
    public abstract void eat(); //方法体
    //抽象类里可以不写抽象方法
}

package com.oxi.abstractclass;

public class Panda extends Animal{ //抽象类Animal被继承
    @Override
    public void eat() {
        System.out.println("熊猫吃竹子");
    }
}

package com.oxi.abstractclass;

public class Tiger extends Animal{ //抽象类Animal被继承
    @Override
    public void eat() {
        System.out.println("老虎吃肉");
    }
}

package com.oxi.abstractclass;

public class AnimalTest {
    public static void main(String[] args) {
        Animal p1=new Panda();
        p1.eat();
        Animal p2=new Tiger();
        p2.eat();
    }
}

注:

如果一个类继承于一个抽象类,那么这个类必须实现抽象类中的所有抽象方法,否则该类要被定义为抽象类。

抽象类不一定有抽象方法,但有抽象方法的一定是抽象类。

二、接口

1、概念

在软件工程中,软件与软件的交互很重要,这就需要一个共同的标准。每个程序员都应该能编写实现这样的标准方式,接口就是对标准的描述。

在Java编程语言中,接口是类似于类的引用类型,它只能包含常量,方法签名,默认方法,静态方法和嵌套类型。方法主体仅适用于默认方法和静态方法。接口无法实例化——它们只能由类实现或由其他接口扩展。


接口声明可以包含方法签名,默认方法,静态方法和常量定义。具有实现的方法是默认方法和静态方法。


补:从上面的说明可知道,接口中没有构造方法。

2、接口定义

语法

[public] interface 接口名 {
    [public static final] 数据类型 变量名 =变量的值;
    //接口中定义变量,该变量是静态常量,在定义时必须赋值

    返回值类型 方法名([参数列表]); //定义接口方法

    default 返回值类型 方法名([参数列表]){ //接口中定义的默认方法,必须在JDK8及以上版本使用
        [return 返回值;]
    }

    static 返回值类型 方法名([参数列表]){ //接口中定义的静态方法,必须在JDK8及以上版本使用
        [return 返回值;]
    }

    private 返回值类型 方法名([参数列表]){ //接口中定义的私有方法,必须在JDK9及以上版本使用
        [return 返回值;]
    }
}

// [ ]里的内容可写可不写

代码案例

package com.oxi.abstractclass.interfaceclass;

 interface Test {
     int number=10; //接口中的变量是静态常量

     void show(); //接口中方法默认是抽象方法

     default int pius(int a,int b){
         return a+b;
     } //这是默认方法,接口中的方法都是 public 型的

      static int multiply(int a,int b){
         return a*b;
     } //这是静态方法,接口中的方法都是 public 型的

     private String name(){
         return "admit";
     } //这是接口中定义的私有方法,必须在JDK9及以上的版本使用
}

3、接口继承

语法

 [public] interface 接口名 extends 接口名1,接口名2,接口名3, …… ,接口名n {

   

}

注意:

接口可以多继承,这是Java中唯一可以使用多继承的地方,接口包含的变量都是静态常量,接口中包含的方法签名都是公开的抽象方法,接口中的默认方法和静态方法在JDK8及以上版本オ能定义,接口的私有方法必须在JDK9及以上版本オ能定义。接口编译完成后也会生成相应的class文件。

4、接口实现

语法

 访问修饰符 class 类名 implements 接口名1,接口名2,接口名3, …… ,接口名n {

 

}

实现接口中的类必须实现接口中声明的所有方法。

一个类如果实现了一个接口,那么就必须实现这个接口中定义的所有抽象方法(包括接口通过继承关系继承过来的抽象方法),这个类被称为接口的实现类或者说子类。与继承关系一样,实现类与接口之间的关系是is-a的关系。

5、接口应用场景

一般来说,定义规则,定义约定时使用接口。

三、总结

抽象类和接口的区别

1.抽象类拥有构造方法,而接口没有构造方法;
2.抽象类可以定义成员变量、静态变量、静态常量,而接口中只能定义静态常量;
3.抽象类中的方法可以有受保护、默认的方法,而接口中的方法都是公开的(JDK9中可以定义的私有方法除外);
4.抽象类主要应用在对于抽象事物的描述,而接口主要应用在对于约定、规则的描述;

5.抽象类只能实现单继承,而接口可以实现多继承,接口只能继承接口,接口只能被实现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值