Java 超详细讲解抽象类与接口的使用

目录
  • 一、抽象类
    • 1、抽象类的语法
    • 2、抽象类的特性
    • 3、抽象类的作用
  • 二、接口
    • 1、接口的概念
    • 2、接口使用
    • 3、接口特性
    • 4、实现多个接口
    • 5、接口间的继承
    • 6、常用的接口
      • (1)Comparable接口
      • (2)Cloneable接口
  • 三、Object类

一、抽象类

在Java中,如果一个类被abstract修饰称为抽象类,抽象类中被abstract修饰的方法称为抽象方法,抽象方法不用给出方法体。

1、抽象类的语法

//抽象类:被abstract修饰的类
public abstract class Shape{
   //抽象方法:被abstract修饰的方法,没有方法体
   public abstract void drew();
   //抽象类中也可以增加普通方法和属性
   public double getArea(){
      return area;
   }
}

【注】抽象类也可以包括普通的方法和属性,甚至构造方法

2、抽象类的特性

  • 抽象类不能直接实例化对象
  • 抽象类不能被private、final和static修饰,因为抽象方法要被子类重写
  • 抽象类中不一定包含抽象方法
  • 抽象类必须被继承,如果被普通子类继承,继承后子类需要重写父类中的抽象方法
  • 如果抽象类B继承抽象类A,B中可以不用重写A中抽象类,但其最后继承的子类需要重写所有的抽象方法。

3、抽象类的作用

抽象类本身不能被实例化,要想使用,只能创建该抽象类的子类,然后通过子类重写抽象类中的抽象方法。使用抽象类相当于多了一层编译器的检验。

有些情况下实际工作不应该由父类完成,而应由子类完成,如果误用为父类,父类为抽象类时就会在实例化时报错。

二、接口

1、接口的概念

接口就是公共的行为规范标准,大家在实现的时候,只要符合规范标准,就可以通用。在Java中,接口可以看成:多个类的公共规范,是一种引用数据类型。使用关键字interface。

public interface 接口名称{
    // 抽象方法
    public abstract void method1(); // public abstract 是固定搭配,可以不写
    public void method2();
    abstract void method3();
    void method4();
// 注意:在接口中上述写法都是抽象方法,
}

【注】

  • 创建接口时,命名一般以大写字母“I”口头
  • 接口中和抽象方法默认public abstract
  • 成员变量默认public static final

2、接口使用

接口不能直接使用,需要有一个类来实现该接口,实现接口中所有的抽象方法

public class  类名称 implements 接口名称{

//……

}

【注】子类与父类之间是extends继承关系,类与接口之间是implements实现关系

3、接口特性

  • 接口中的类不能在接口中实现,只能在实现接口的类中实现
  • 使用interface修饰
  • 接口不能使用new直接实例化
  • 接口中可以定义实现了的方法,使用default或者static修饰
  • default方法是接口的默认方法,也可以在实现类中重写这个方法
  • 一个类可以实现过个接口,使用逗号隔开
  • 接口中不能有构造方法和静态代码块

4、实现多个接口

Java中,类与类是单继承的关系,一个子类只能有一个父类,即Java不支持多继承。但是一个类可以实现多个接口。

class Animal{
    protected String name;
    public Animal(String name){
        this.name=name;
    }
}
interface IFlying{
    void fly();
}
interface IRunning{
    void run();
}
interface ISwimming{
    void swim();
}
class Duck extends Animal implements IFlying,IRunning,ISwimming{
    public Duck(String name) {
        super(name);
    }
    @Override
    public void fly() {
        System.out.println("Duck正在飞!");
    }
    @Override
    public void run() {
        System.out.println("Duck正在跑!");
    }
    @Override
    public void swim() {
        System.out.println("Duck正在游泳!");
    }
}

【注】一个类可以实现多个接口,每个接口中的抽象方法都要实现。(使用ctrl+i快速实现接口)

5、接口间的继承

在Java中,类与类之间是单继承,一个类可以实现多个接口,接口与接口之间可以多继承。用接口可以达到多继承的的目的。

interface Animal extends IRunning,IFlying{
    //……
} 

接口继承接口,达到复用的效果,使用关键字extends。

6、常用的接口

(1)Comparable接口

import java.util.Arrays;
class Student implements Comparable{
    private String name;
    private int age;
    public Student(String name,int age){
        this.name=name;
        this.age=age;
    }
    @Override  //重写toString方法
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    @Override  //重写Comparable中的compareTo方法
    public int compareTo(Object o) {
        Student x=(Student)o;
        if(this.age>x.age){
            return -1;
        }if(this.age<x.age){
            return 1;
        }else{
            return 0;
        }
    }
}
public class TestDemo {
    public static void main(String[] args) {
        Student[] students=new Student[3];
        students[0]=new Student("zhangsan",18);
        students[1]=new Student("lisi",22);
        students[2]=new Student("liming",21);
        Arrays.sort(students);
        System.out.println(Arrays.toString(students));
    }
}

当我们对students进行排序时,编译器不能确定通过什么排序,此时会报错,需要重写Comparable接口中的compareTo方法。

(2)Cloneable接口

Object类中存在一个clone方法,掉哦用这个方法可以创建一个对象的拷贝。要想合法调用clone方法,必须先实现Cloneable接口。否则会抛出CloneNotSupportedException异常。

class Person implements Cloneable{
    private String name;

    public Person(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                '}';
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
public class TestDemo1 {
    public static void main(String[] args) throws CloneNotSupportedException {
        Person person1=new Person("zhangsan");
        Person person2=(Person)person1.clone();

    }
}

Cloneable为空接口。空接口:标记接口。证明当前类是可以被克隆的。此时克隆的对象提供了副本,修改其中的信息不会对原信息产生影响。Cloneable拷贝出的对象是一份“浅拷贝”。

三、Object类

Object类是Java默认提供的一个类。Java里面除了Object类,所有的类都是存在继承关系的。默认继承Object父类。如果要打印对象中的内容,可以直接重写Object类中的toString方法。

【注】使用Object可以接受所有类的对象

对象比较equals()方法

在Java中,==进行比较时:

  • 如果==左右两侧是基本类型变量,比较的是变量中的值是否相等
  • 如果==左右两侧是引用类型变量,比较的是引用变量地址是否相同
  • 如果要比较对象中的内容,必须重写Object中的equals方法,因为equald方法默认也是按照地址比较的
//Object类中的equals方法
public boolean equals(Object obj){
    return (this==obj);//使用引用中的地址直接来比较
}

【注】比较对象中内容是否相同时,一定要重写equals方法

到此这篇关于Java 超详细讲解抽象类与接口的使用的文章就介绍到这了,更多相关Java 抽象类与接口内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java中的抽象类和接口你了解吗

    目录 抽象类 什么是抽象类? 抽象类属于什么类型? 抽象类怎么定义? 抽象类是干什么的? 什么是抽象方法? 非抽象类继承抽象类 抽象类总结 接口 接口的基础语法 接口的实现 接口和多态联合使用 继承和实现同时出现 接口在开发中的作用 类型和类型之间的关系 总结 抽象类 什么是抽象类? 类和类之间有共同特征,将这些共同特征提取出来进一步抽象,就形成了抽象类.由于类是不存在的,所以抽象类无法创建对象. 抽象类属于什么类型? 抽象类也属于引用数据类型. 抽象类怎么定义? [修饰符列表] abstrac

  • 浅析Java中接口和抽象类的七大区别

    目录 接口 抽象类 区别1:定义关键字不同 区别2:继承或实现的关键字不同 区别3:子类扩展的数量不同 区别4:属性访问控制符不同 区别5:方法控制符不同 区别6:方法实现不同 区别7:静态代码块使用不同 总结 Java 是一门面向对象的编程语言,面向对象的编程语言有四大特征:抽象.封装.继承和多态. 而本文介绍的接口和抽象类就是面向对象编程中"抽象"的具体实现,也就是说接口和抽象类都是用来定义实体类的公共行为的,它们是对实体类(对象)更高层次的抽象. ​说明:本文以下内容基于 JDK

  • 解析JavaSe的抽象类和接口

    目录 1. 抽象类和抽象方法 2. 相关面试题 1.抽象类必须要有抽象方法吗? 2.普通类和抽象类有哪些区别? 3.抽象类能使用 final 修饰吗? 3. 接口 3.1 接口中的常量 3.2 接口中的方法 3.2.1 接口中的普通方法 3.2.2 接口中的静态方法 3.2.3 接口中的默认方法 3.3 接口中的接口和枚举类 3.4 接口和抽象类 总结 1. 抽象类和抽象方法 抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义成抽象类,抽象类里可以没有抽象方法.抽象方

  • Java抽象类和接口使用梳理

    目录 抽象类 抽象方法 抽象类三大原则 接口 接口使用原则 JDK两大内置接口 java.lang.Comparable 比较接口 java.lang.Cloneable 克隆接口 对象的深浅拷贝 抽象类和接口的区别 抽象类 什么是抽象类呢?在现实生活中,我们说“人类”,我们无法对应到具体某个人,同样的,“动物类”.“图形类”这些无法映射到具体的对象的类就是抽象类. 抽象类是普通类的超集,意思就是普通类有的抽象类也有,只是它比普通类多了一些抽象方法而已.这些抽象方法可以有一个,也可以有多个. 它

  • Java 深入浅出解析面向对象之抽象类和接口

    目录 抽象类 声明抽象类 声明抽象方法 案例 使用规则 接口 声明接口 案例 接口特性 抽象类和接口的区别 抽象类 java语言,声明类时 abstract class Db{} 说明Db类为抽象类. java语言中,抽象方法是说没有方法的实现(方法体)此方法为抽象方法,只有抽象类和接口中才可以有抽象方法. 声明抽象类 声明抽象类很简单,加个abstract关节字就行. public abstract class AA { } 声明抽象方法 在抽象类中声明一个抽象方法,抽象方法没有方法体,就是说

  • Java中抽象类和接口介绍

    目录 1.抽象类 1.1 什么是抽象类? 1.2 抽象类属于什么类型? 1.3 抽象类怎么定义? 1.4 抽象方法 2.接口 2.1 关于接口 2.2 接口怎么定义? 2.3 接口基础语法 总结 1.抽象类 1.1 什么是抽象类? 1.1.1 对抽象类的理解 1.1.2 关于抽象类 类与类之间具有共同特征,将这些共同特征提取出来,形成的就是抽象类: 类本身是不存在的,属于抽象类无法创建对象[无法实例化]: 抽象类是用来被子类继承的: finial关键字和abstract关键字不能同时出现: 抽象

  • Java入门基础之抽象类与接口

    目录 一.抽象类 1.什么是抽象类 2.语法规则 3.抽象类的作用 二.接口 1.什么是接口 2.语法规则 3.实现多个接口 4.接口之间的继承 三.接口的使用实例 1. Comparable 接口 2.Comparator接口 3.Clonable接口 四.总结 一.抽象类 1.什么是抽象类 首先我们来回顾一下上一篇文章提到的一个例子:打印图形 class Shape { public void draw() { // 啥都不用干 } } class Cycle extends Shape {

  • Java中比较抽象类与接口的异同

    目录 一.抽象类 (一)概念 (二)抽象类和抽象方法 (三)使用抽象类的意义 二.接口 (一)概念 (二)语法 三.比较抽象类与接口 Q: 为什么有了抽象类还要接口?  Q: 如何确定在什么情况下应该使用接口,什么情况下应该使用类呢? 一.抽象类 (一)概念       在继承的层次结构中,每个新的子类都使类变得更加明确和具体.如果从一个子类向父类追溯,类就会变得更通用.更加不明确.类的设计应该确保父类包含它的子类的共同特征.有时候,一个父类设计得非常抽象,以至于它都没有任何具体的实例.这样的类

  • java中抽象类和接口的相同和不同点介绍

    目录 前言 一.抽象类是什么? 二.接口是什么? 三.抽象类和接口的异同点 总结 前言 本文简单介绍抽象类,接口以及它们的异同点,另附简单的代码举例. 一.抽象类是什么? 在 Java 语言中使用 abstract class 来定义抽象类.抽象类是不能被实例化的,即不能用new关键字来实例化对象.包含抽象方法的一定是抽象类,但抽象类不一定包含抽象方法.如果一个子类实现了父类(抽象类)的所有抽象方法,那么该子类可以不必是抽象类,否则就是抽象类.抽象类中的抽象方法的修饰符只能为public或者pr

  • Java 超详细讲解抽象类与接口的使用

    目录 一.抽象类 1.抽象类的语法 2.抽象类的特性 3.抽象类的作用 二.接口 1.接口的概念 2.接口使用 3.接口特性 4.实现多个接口 5.接口间的继承 6.常用的接口 (1)Comparable接口 (2)Cloneable接口 三.Object类 一.抽象类 在Java中,如果一个类被abstract修饰称为抽象类,抽象类中被abstract修饰的方法称为抽象方法,抽象方法不用给出方法体. 1.抽象类的语法 //抽象类:被abstract修饰的类 public abstract cl

  • Java超详细分析抽象类和接口的使用

    目录 什么是抽象类 抽象类语法 总结抽象类: 接口 怎么定义接口 接口间的继承 几个重要的接口 接口comparable comparator接口-比较器 cloneable接口深入理解深拷贝与浅拷贝 怎么使用cloneable接口 浅拷贝: 深拷贝 什么是抽象类 什么是抽象类呢?抽象类顾名思义就是很抽象,就是当我们没有足够的信息去描述这个类的时候我们就可以先不用描述,这样的类就是抽象类. 用代码举个例子: class Shape { public void draw() { System.ou

  • Java超详细介绍抽象类与接口的使用

    目录 1.抽象类的语法和特性 1.1语法 1.2特性 2.接口的语法和使用 2.1语法 2.2特性 1.抽象类的语法和特性 1.1语法 1.在Java中,一个类如果被abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用给出具体的实现体. // 抽象类:被abstract修饰的类 public abstract class Shape { // 抽象方法:被abstract修饰的方法,没有方法体 abstract public void draw()

  • Java超详细讲解抽象类的原理与用法

    目录 1. 抽象类是什么 2 抽象类的语法 3 抽象类都有什么特性 4 抽象类是干什么的 1. 抽象类是什么 ️给大家上一篇小作文,看完这个,你就理解了什么叫做抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的, 如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. ️思考一下抽象类和类在功能上什么区别 因为抽象类是没有足够的信息去描绘一个具体的对象的,所以抽象类也就不能实例化对象 除此之外,抽象类的其它功能都是存在的,成员

  • Java超详细讲解接口的实现与用法

    目录 1.接口的定义 2.接口的实现 3.接口的引用 4.接口的继承 5.利用接口实现多重继承 1.接口的定义 接口是一种特殊的抽象类,是Java提供的一个重要的功能,与抽象类不同的是: 接口的所有数据成员都是静态的且必须初始化. 接口中的所有方法必须都是抽象方法,不能有一般的方法. [public] interface 接口名称 [extends  父接口名列表]{    [public] [static] [final]数据类型 成员变量名 = 常量;    ...    [public][

  • Java超详细讲解设计模式之一的工厂模式

    目录 工厂模式 1.简单工厂 1.1结构 1.2实现 1.3优缺点 1.4扩展 2.工厂方法 2.1结构 2.2实现 2.3优缺点 3.抽象工厂 3.1结构 3.2实现 3.3优缺点 4.模式扩展 4.1实现 工厂模式 在Java应用程序中对象无处不在,这些对象都需要进行创建,如果创建的时候直接new对象,那么如果我们要更换对象,所有new对象的地方都需要进行更改.违背了软件设计原则中的开闭原则.如果我们使用工厂生产对象,只需要在工厂中关注对象的改变即可,达到了与对象解耦的目的,工厂模式最大的特

  • Java 超详细讲解设计模式之中的抽象工厂模式

    目录 抽象工厂模式 1.什么是抽象工厂 2.抽象工厂模式的优缺点 3.抽象工厂模式的结构与实现 4.抽象工厂方法模式代码实现 5.抽象工厂模式的应用场景 6.抽象工厂模式的扩展 抽象工厂模式 前面文章介绍的工厂方法模式中考虑的是一类产品的生产,比如案例中的百事可乐工厂只能生产百事可乐,可口可乐工厂只能生产可口可乐,也就是说:工厂方法模式只考虑生产同等级的产品. 1.什么是抽象工厂 在现实生活中许多工厂是综合型的工厂,能生产多种类)的产品,就拿案例里面的可乐来说,在节日的时候可能会有圣诞版的可乐,

  • Java 超详细讲解设计模式之中的建造者模式

    目录 1.什么是建造者模式? 2.建造者模式的定义 3.建造者模式的优缺点 4.建造者模式的结构 5.建造者模式代码演示 6.建造者模式的应用场景 7.建造者模式和工厂模式的区别 1.什么是建造者模式? 我们知道在软件开发过程中有时需要创建一个很复杂的对象,通常由多个子部件按一定的步骤组合而成. 例如,比如我们在自己在组装一台计算机的时候,需要有 CPU.主板.内存.硬盘.显卡.机箱.显示器.键盘.鼠标等部件组装而成的.比如学校需要采购100台计算机,学校不可能自己把零件买过来自己组装,肯定是告

  • Java 超详细讲解数据结构中的堆的应用

    目录 一.堆的创建 1.向下调整(以小堆为例) 2.创建堆 3.创建堆的时间复杂度 二.堆的插入和删除 1.堆的插入 2.堆的删除 三.堆的应用 1.堆排序 2.top-k问题 [求最小的K个数] 四.常用接口的介绍 1.PriorityQueue的特性 2.优先级队列的构造 一.堆的创建 1.向下调整(以小堆为例) 让parent标记需要调整的节点,child标记parent的左孩子(注意:parent如果有孩子一定先是有左孩子) 如果parent的左孩子存在,即:child < size,

  • Java超详细讲解SpringMVC如何获取请求数据

    目录 1.获得请求参数 1)基本类型参数:​​​​​​​   2)POJO类型参数: 3)数组类型参数   4)集合类型参数   2.请求乱码问题 3.参数绑注解@RequestParam​​​​​​​ 4.获得Restful风格的参数 5.自定义类型转换器 6.获得请求头 7.文件上传 8.小结 1.获得请求参数 客户端请求参数的格式是:name=value&name=value- - 服务器端要获得请求的参数,有时还需要进行数据的封装,SpringMVC可以接收如下类型的参数: 1)基本类型

随机推荐