Java 抽象类和接口

**抽象类的概念:**在 Java 面向对象当中,所有的对象都是用过类进行描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,我们把这种类定义为抽象类。
(抽象类代表某个概念,不能有对象,不能实例化。)

**接口:**描述类具有什么功能,不给出实现。
(PS:接口不是类,只是一组需求的描述。
一个类可以实现一个或多个接口。)

抽象类和抽象方法:
(1)用abstract关键字修饰一个类=抽象类
注意:抽象类不能被实例化,抽象方法必须在子类中被实现。
抽象类不能直接使用,必须用子类去实现抽象类,然后使用其子类的实例。

abstract class People{
    private String name;
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return this.name;
    }
    //抽象方法
    public abstract void work();
}
class Teacher extends People{
    //必须实现该方法
    public void work(){
        System.out.println("我叫"+this.getName());
    }
}
class Driver extends People{
    //必须实现该方法
    public void work(){
        System.out.println("我叫"+this.getName());
    }
}

(2)abstract void fun();
用abstract关键字修饰一个方法=抽象方法
注意:抽象方法只需声明,无需实现
(3)含有抽象方法的类必须声明为抽象类

抽象类与普通类的区别:
1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
2)抽象类不能用来创建对象;
3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
在其他方面,抽象类和普通的类并没有区别。

接口:
(1)不是类。只是一组需求的描述,这些类要遵从接口描述的统一格式进行定义。
(2)说明一组类能做什么,而不关心如何做。
(3)特殊的类,是由全局常量和公共的抽象方法构成

Java中只能单一继承,java使用interface来达到多重继承的目的,可以一次实现多个接口。
Java中定义了很多接口,比如java.lang.Comparable接口,java.lang.Cloneable接口。每个接口都有每个接口定义的职责

对象比较排序Comparable接口和Comparator接口:
Comparable接口:此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序,类的compareTo方法被称为它的自然比较方法 。实现此接口的对象列表和数组可以通过Collections.sort和Arrays.sort进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。
Comparator接口:
与上面的Comparable接口不同的是:
①、Comparator位于包java.util下,而Comparable位于包java.lang下。
②、Comparable接口将比较代码嵌入需要进行比较的类的自身代码中,而Comparator接口在一个独立的类中实现比较。
③、如果前期类的设计没有考虑到类的Compare问题而没有实现Comparable接口,后期可以通过Comparator接口来实现比较算法进行排序,并且为了使用不同的排序标准做准备,比如:升序、降序。
④、Comparable接口强制进行自然排序,而Comparator接口不强制进行自然排序,可以指定排序顺序。

对象克隆Cloneable接口
深度克隆的实现方法之一:

public class Attribute implements Cloneable {
    private String no;
    public Object clone() {
        try {
            return super.clone();
        } catch (CloneNotSupportedException e) {
            return null;
        }
    }
}
public class Product implements Cloneable {
    private String name;
    private Attribute attribute;
    public Object clone() {
        try { 
            return super.clone();
        } catch (CloneNotSupportedException e) {
            return null;
        }
    }
} 

抽象类和接口的相同点:
接口和抽象类都不能实例化,只能被继承实现。
接口和抽象类都可以包含抽象方法。实现接口和抽象类的类都必须实现这些抽象方法。
不同点:
(1)接口只包含抽象方法,不包括已实现的方法;抽象类则可以包含普通方法。
(2)接口不能定义静态方法;抽象类可以。
(3)接口不包含构造函数;抽象类可以。
(4)一个类最多只能有一个直接父类,包括抽象类;但一个类可以直接实现多个接口,通过实现多个接口来弥补java单继承的不足。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值