您的位置:首页 > 职场人生

关于面试中abstract 和 interface 的区别

2011-08-15 14:08 337 查看
这个在网上找了一些文章看了。说的好多,就决定自己用代码去实验一番。

public interface Demo1 {//接口的实验

protected String aa = "可以有自己的属性变量";//报错,其实我只能是 public static final

String bb(){

System.out.println("不能带有自己的成员方法");//报错

}

public Demo1(){//报错

System.out.println("没有自己的构造方法");

}

abstract void cc();//带上抽象方法

}

总结:1、接口可以带自己的变量和方法,变量必须是public static final(不写也可以,是默认的),方法只能是抽象的。

2、接口不能建构造方法。

==============================================================================================================

public abstract class Demo2 {

protected String aa ="抽象类可以有自己的属性变量";//默认:friendly

void bb() {

System.out.println("抽象类可以有自己的成员方法");

}

abstract void cc();//这个需要去实现。。。

}

===========================================

public abstract class Demo3 extends Demo2{

//虽然继承了抽象类Demo2,但是因为自己身上也有abstract标志,所以可以不去实现Demo2中的抽象方法。

public Demo3(){

//可以有构造方法。

}

abstract void dd();

}

===========================================

public class Demo4 extends Demo3 {

@Override

void dd() {

// 必须要去实现Demo3中的抽象方法

}

@Override

void cc() {

// 必须要去实现Demo2中的抽象方法

}

}

通过抽象类Demo3继承抽象类Demo2,再用Demo4去继承抽象的Demo3。

总结:1、抽象类可以有自己的变量和方法,无限制。变量为friendly类型。

2、可以有构造方法。

从代码层可以知道这两点。

剩下的是需要自己去记的。

1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。接口继承接口,不能实现接口。抽象类继承抽象类,能实现接口。

   2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是public static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。

   3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。

   4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

   5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

   6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

   7.接口中的方法默认都是 public,abstract 类型的。

方面abstractinterface
数据成员有( friendly)有(public static final)
成员方法只有abstract的成员方法
构造方法
继承抽象类、实体类接口
实现接口
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: