本文共 1731 字,大约阅读时间需要 5 分钟。
在进行抽象类和接口区别之前,我们先要明白什么是抽象类,什么是接口。
关于这个问题之前,我们必须要明白子类继承超类的关系,子类会继承超类(父类)的所有方法,甚至可以重写父类的方法。那么有这个基础就好解释抽象类了。
抽象类是一个只有超类或者用作子类的超类拥有的特性。这样可以很直白的说明了,只有父亲拥有抽象类,子类不能拥有,所以这就限制了父类抽象化了不能被实例化,而子类可以实例化对象。
由如图所示
如果子类继承了抽象类的父类,只有子类可以进行实例化,同时实例化后的对象可以调用它实现父类的方法。可以总结:父类使用抽象abstract关键字来修饰,抽象方法必须写在抽象类里,且继承该父类的子类必须实现父类的方法(方法重写)。
//抽象父类public abstract class Parent { private int sum; public abstract void sum_data();//抽象方法,没有实现 }
//继承抽象类的子类public class children extends Parent{ public static void main(String[] args) { // TODO Auto-generated method stub children c = new children(); c.sum_data(); Parent p = new Parent() ;//此处报错,抽象类不能被实例化 } @Override public void sum_data() { // TODO Auto-generated method stub int data = 0 ; data +=1; System.out.println(data); }//覆盖父类抽象方法,方法重写 }
接口就是一堆的方法的特征,没有具体的实现,仅仅是特征。它包含了所有的要实现的方法,要想实现这 些方法可以在不同的类中实现它,这就能控制接口方法的实现,也就展示给人们具有不同样的行为。java没有多继承,所以采用多接口来实现多种方法。
这是很重要的,我们希望在java的个个结构方便编写,在实现方法时候不能总是依赖于类中的方法,所有就有了接口。(这里强调,接口不是类,它是所有方法的特征集合。)
请看接口的定义:
public interface openmethod { int age();}
这里有一些接口知识点:1)接口必须是public类型的
2)接口申明常量时,就会加public static final默认类型
3)接口也可以被其他子类接口继承
接口的调用方法:
public class children implements openmethod {//implement关键字调用 public int age() { // TODO Auto-generated method stub return 10; }//必须写出接口方法,可以对应的实现其中的接口方法 public static void main(String[] args) { children c =new children(); System.out.println(c.age());} }
其实看了很明显了,接口是一堆没有实现的方法,它不是类,所以在实现接口的时候要把所有的方法都实现,但是可以根据自己需要进行重写方法,而抽象类只能是实现有关键字abstract修饰的方法,且有一个相同特征就是接口不可以被实例化,抽象类也不能被实例化。默认方法,接口不能拥有默认方法实现,但是抽象类可以写默认方法实现。修饰符中,抽象类可以是public private default等,但是接口只有public。抽象方法可以有构造器,接口不能有,接口只能拥有方法的创建,不能被实现(jdk1.8之前。)
jdk1.8后接口有默认方法和静态方法,但是我们不建议用,因为接口就像作用一个方法堆的形式,它最好就是用来提供我们服务的,我们怎么去用它就取决于我们。
转载地址:http://bntrn.baihongyu.com/