Java的抽象类和接口

来源:互联网 发布:tcp ip网络编程 代码 编辑:程序博客网 时间:2024/06/04 19:56

一、抽象类
在解决实际问题中,一般将父类定义为抽象类,需要使用父类进行集成和多态处理。继承树中越往上越抽象(如鸡是属于家禽,家禽是属于动物),在多态中,并不需要将父类初始化,我们需要的只是子类对象,所以在Java中设置抽象类不可以实例化对象

public abstract class Test{    abstract void testAvstract();//定义抽象方法}

二、接口

public interface drawTest{    void draw();//接口内的方法,省略abstract关键字}

1、接口是可以像类一样被权限修饰符修饰,但是public关键字仅限用于接口与其同名的文件中被定义
2、interface:定义接口的关键字
3、drawTest:接口的名称
在接口的定义的方法中必须定义为public或者abstract形式,其他修饰符是不被Java编译器认可的,即使不将该方法声明为public的形式,也是public
在接口中 定义的任何字段都自动是static和final的
例1:多态和接口相结合

interface drawTest{    public void draw();}class ParallelogramgleUseInterface extends QuadrangleUseInterface implements drawTest{    public void  draw(){//该类实现了接口,所以要覆盖draw()的方法        System.out.println("绘制平行四边形");    }}class SquareUseInterface extends QuadrangleUseInterface implements drawTest{    public void draw(){        System.out.println("绘制正方形");    }}public class QuadrangleUseInterface{//定义四边形类    public static void main(String[] args){    drawTest[] d = {//接口向上转型操作    new SquareUseInterface(),new ParallelogramgleUseInterface()     };    for(int i = 0; i < d.length; i++){        d[i].draw();//调用draw方法    }    }}

结果如下:
这里写图片描述

例2:接口和继承结合

interface intf{}interface intf1 extends intf{}

在Java中是不允许多重继承的,但是使用接口就可以实现多重继承,因为一个类是可以实现很多接口的,多重继承的语法如下:

class 类名 implements interface1interface2interface3,...interfacen;

三、类的继承,多态和接口的区别
类的继承:可以继承父类原有的属性和方法,也可以增加父类所不具备的方法
接口:接口中所有的方法都是没有方法体的,只有方法的特征,没有方法的实现,因为在不同的类中实现的方法是不一样的。
多态:可以对所有类进行通用的处理,多态即多种状态,接口的多种不同实现方式就是多态
一个类只能继承一个父类,但是却能实现很多的接口。

四、覆盖和重载的区别
覆盖 (override):也叫重写,就是在当父类中的某些方法不能满足要求时,子类中改写父类的方法。当父类中的方法被覆盖了后,除非用super关键字,否则就无法再调用父类中的方法了。被覆盖的方法不能是final类型的。因为final修饰的方法是无法覆盖的。而且被覆盖的方法不能为private。否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。并且被覆盖的方法不能为static。所以如果父类中的方法为静态的,而子类中的方法不是静态的,但是两个方法除了这一点外其他都满足覆盖条件,那么会发生编译错误。反之亦然。即使父类和子类中的方法都是静态的,并且满足覆盖条件,但是仍然不会发生覆盖,因为静态方法是在编译的时候把静态方法和类的引用类型进行匹配。
方法的覆盖和重载具有以下相同点:
都要求方法同名
都可以用于抽象方法和非抽象方法之间

方法的覆盖和重载具有以下不同点:
方法覆盖要求返回类型必须一致,方法重载对此没有要求。
方法覆盖只能用于子类覆盖父类的方法,方法重载用于同一个类中的所有方法(包括从父类中继承而来的方法)
父类的一个方法只能被子类覆盖一次,而一个方法可以在所有的类中可以被重载多次。
对于属性(成员变量)而言,是不能重载的,只能覆盖。

0 0
原创粉丝点击