接口,抽象类,一般类

   接口,抽象类,一般类,他们的共同点:都是一个类;

    抽象类前面介绍了一些,下面谈谈接口,我们知道抽象类用abstract修饰符修饰,它可以拥有抽象方法,也可以拥有具体方法。抽象类最大的特征就在于它不能被实例化,而接口本身就是一个抽象类,不同于抽象类的是,你可以不用显式地显示它的abstract修饰符,也不用显式地显示它的方法的abstract修饰符,即使不显示,但是它的方法依然属于抽象方法,接口中只能包含抽象方法,它不允许有具体方法。

   接口是用来实现的,用修饰符implements,而抽象类则只能被extends.一个一般类只能继承于一个类,但是它可以实现多个接口。

1)定义一个接口:

public  abstract interface IInterTest  //等同于public class IInterTest,可以省略 abstract
{
        public  void printName();//等同于public abstract void printName,可以省略 abstract
}

2)定义它的实现类:

public   class InterTest  extends InterTester
{
    public static void main(String[] args)
    {
        IInterTest test = new InterTest();//接口的多态,借口自己无法实例化,但是它的引用可以指向它的一个实现类的对象;
        
        test.printName();
        
        InterTester test1 = new InterTest();
        
        InterTester test2 = new InterTest();
        
        test1.printAge();//父类的static方法是无法被重写的,就是你写了它也不帮子类实现,一直实现的是父类的方法;
        
        InterTester.printAge();//推荐使用类名.加静态方法
    }
    public void printName()//抽象类实现接口,可以不写接口中的方法,但是不代表它没做;实现接口的抽象类中虽然可以不写接口的方法,但是不代表这个方法没有,所以必须实现抽象方法;
    {
        System.out.println("MyName");
    }
    public static void printAge()//静态方法只能被继承,不能被重写,虽然不报错,但是不执行
    {
        System.out.println(33);
    }
    public InterTest()//只在new一个新的对象的时候,才执行构造方法;
    {
        System.out.println("后于静态代码块执行!");
    }
    static //初始时执行,执行一次,最先执行最上级的父类,再依次向下执行,执行完所有静态代码块再做其他操作;
    {
        System.out.println("静态代码块,先于构造方法!");
    }
}
abstract class InterTester implements IInterTest
{
    //抽象类实现接口,可以不写接口中的方法,但是不代表它没做;
    public static void printAge()
    {
        System.out.println(23);
    }
}


输出结果如下:

静态代码块,先于构造方法!
后于静态代码块执行!
MyName
后于静态代码块执行!
后于静态代码块执行!
23
23

上面的程序将继承,实现,一般类,接口,抽象类放到一起就是方便大家区分。接口不能被一般类继承,接口只能被接口继承,接口既可以被一般类实现,也可以被抽象类实现。

原文地址:https://www.cnblogs.com/MedivhQ/p/3801416.html