抽象类与接口

抽象类

一,抽象方法的定义:方法名前面被抽象修饰的方法

 abstract void f();//声明方法f()是抽象方法

二,抽象方法的几个特点:

1,抽象方法不能给出具体实现过程,注意是“不能”,若给出实现过程则会在编译时报错

2,抽象方法的访问权限不能是私有的,这很好理解,因为该方法就是为了被继承,让其子类来实现该方法的

3,抽象方法不能被final,static关键字修饰

三,抽象类的定义:类名前面被抽象修饰的类称为抽象类

abstract class B//声明类B是抽象类

四,抽象类的几个特点:

如图1所示,若一个类中含有抽象方法,则该类必须被声明为抽象类,换句话说,抽象类中可以没有抽象方法

2,抽象类可以含有成员变量,且成员变量的声明和使用和普通类是一样的

3,抽象类中的方法可以是抽象方法,也可以是普通的方法

4,抽象类可以没有构造函数,也可以有构造函数,构造函数为成员变量进行初始化

5,抽象类不能实例化,只能被其他类继承

6,抽象类可以被另一个抽象类继承,子抽象类可以不用实现父类的抽象方法

7,抽象类可以被普通类继承,普通类必须要实现父类的所有抽象方法

接口

一,接口的声明:

interface B//使用关键字interface,声明B是一个接口

二,接口的几个特点:

1,接口中可以含有成员变量,但只能声明为final static public,若不进行说明,则默认是final static public

2,接口中只能含有抽象方法,且只能声明为abstract public,若不进行说明,则默认是abstract public

3,一个类(这个类也可以是抽象类)可以实现多个接口,但如果有父类,继承父类必须写在实现接口前面

public class A extends B implements C,D//类A继承类B,且实现接口C、D

4,类中实现接口中的方法时,必须显式的声明为公共的,因为接口中的方法是public的

三,接口代码演示:

interface B//声明B是一个接口
{
    int a=20;//默认是final static public类型,且只能这样修饰
    void f();//默认被abstract public修饰,且只能这样修饰
}
public class A implements B//类A实现接口B
{
    public void f()//实现接口B的方法,必须声明为public,因为接口中f()是public
    {
        System.out.println("This is the f function in abstract interface B");
    }
    public static void main(String []args)
    {
        A p=new A();
        p.f();
        System.out.println(p.a);
    }
}

四、一些常用的接口

关于比较的说明:

比较返回值有负数、0、正数。表示的含义:如果是负数,则左边小于右边;如果是0,则左边等于右边;如果是正数,则左边大于右边

1、Comparable<进行比较的类型>接口

使用方法:需要进行比较的类继承该接口,然后在类里实现compareTo(进行比较的类型 对象a)方法

代码演示:

public class Test
{
    public static void main(String[] argv)
    {
        student a[]=new student[]{new student(12,"aa"),new student(11,"bob")};
        Arrays.sort(a);
        for (int i = 0; i < a.length; i++)
        {
            System.out.println(a[i].age+a[i].name);
        }
    }
}
class student implements Comparable<student>
{
    int age;
    String name;
    student(int a,String nn)
    {
        age=a;
        name=nn;
    }
    public int compareTo(student b)
    {
        if(age==b.age)
            return name.compareTo(b.name);
        return age-b.age;
    }
}

2、Comparator<需要进行比较的类型>接口

使用方法:声明一个类继承该接口,然后在声明的类里实现compare(进行比较的类型 对象a,进行比较的类型 对象b)方法,在排序时,在参数里可以实例化声明的类来指明比较规则

代码演示:

import java.util.*;
public class Test
{
    public static void main(String[] argv)
    {
        student a[]=new student[]{new student(12,"aa"),new student(11,"bob")};
        Arrays.sort(a,new comp());
        for (int i = 0; i < a.length; i++)
        {
            System.out.println(a[i].age+a[i].name);
        }
    }
}
class student
{
    int age;
    String name;
    student(int a,String nn)
    {
        age=a;
        name=nn;
    }
}
class comp implements Comparator<student>
{
    public int compare(student a,student b)
    {
        if(a.age==b.age)
            return a.name.compareTo(b.name);
        return a.age-b.age;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值