从abstract class到Interface

版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/f2764052703/article/details/88962800

在现实世界的实际开发过程中,人们发现在程序设计过程中有的类中的方法是为了让子类继承的,是为了增强程序的可扩展性而存在的,为了让子类能够强制的重写父类的这个方法,并且参数,返回值,函数名也不能有一点改变,就出现了abstract关键字

abstract

使用abstract修饰的方法是抽象方法,抽象方法有以下特点:

  1. 抽象方法只有声明,没有实现,抽象方法必须由子类进行重写实现。
  2. abstract 关键字不能应用于 static、private 或 final 方法,因为这些方法不能被重写。

拥有抽象方法的类叫做抽象类,抽象类使用abstrat class进行声明。抽象类具有以下特点:

  • 抽象类不能被实例化对象,想要实例化对象就必须实现全部方法,实现全部方法后这个类就不是抽象类。(实例化没意义)。

  • 子类继承自抽象类,必须实现抽象类的全部抽象方法,这样的子类也叫具体类,具体类才可以被实例化(这个实现全部方法方法的子类不是抽象类,抽象类不能实例化)。如果没有实现全部抽象方法,那么这个子类必须也是抽象类。

  • 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

  • 抽象类中可以有非抽象方法,可以有变量

  • 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。

举个栗子:

package objectStudy;

public class main {
    public static void main(String[] args) {
        B b = new B();
        b.see();
        b.ko();
    }
}


abstract class A{
    int a;
    int b;

    abstract public void see();

    public void ko(){
        System.out.println("hello world");
    }
}

class B extends A{
    @Override
    public void see() {
        System.out.println("this is a method of abstract");
    }
}



接口(Interface)

在后来的研发过程中,老板只是想要给员工定义一些规范,并不去考虑怎么去实现具体的功能,使用完全的abstract类有些不太合适,因为类是单继承的,无法同时实现多个规范,所以就使用了支持多继承的接口(Interface)来为员工定义编写规范。
接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。

接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。

接口的特点:

  • 接口没有构造方法
  • 接口中所有的方法必须是抽象方法。
  • 接口不能包含成员变量,除了 static 和 final 变量。
  • 接口不是被类继承了,而是要被类实现。
  • 类是单继承的,而接口支持多继承
  • 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为public abstract(只能是 public abstract,其他修饰符都会报错)。
  • 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量,也就是常量(并且只能是 public,用 private 修饰会报编译错误)。
  • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

再举个栗子:

package objectStudy;

public interface interfaceTest {
    // here only can define  static final value
    static final int a = 4;

    public abstract void see();
}

猜你喜欢

转载自blog.csdn.net/f2764052703/article/details/88962800
今日推荐