java抽象类,接口总结

来源:互联网 发布:java log文件解析入库 编辑:程序博客网 时间:2024/06/05 10:45



抽象类
当多个类中出现相同功能,但是功能主体不同,
这时可以进行向上抽取,只抽取功能定义,而不抽取主体。
关键字abstract定义抽象类


抽象类特点:

1,抽象方法一定定义在抽象类中。
2,抽象方法和抽象类必须被abstract修饰
3,抽象类不可以被new用来创建对象,因为调用抽象方法没意义。
4,抽象类中的方法要被调用,必须由子类复写起所有抽象方法后,
     建立子类对象调用,如果子类对象只复盖部分抽象方法,
     那么该子类还是一个抽象类。


一般类和抽象类有什么异同呢?
1,相同之处:
 一般类和抽象类都用于描述事物,里面都可以定义属性和行为,以及构造函数。
2,不同之处:
 一般类中不可以定义抽象函数,抽象类可以。
 一般类可以被实例化,抽象类不行。

 一般类可以被继承,也可以不被继承。
 抽象类一定要被继承,需要其子类覆盖所有的抽象方法子类才可以被实例化。



特殊:

1,抽象类中可以不定义抽象方法,
这样做仅仅是不让该类建立对象。

2,抽象类中有构造函数,给子类对象提供初始化动作的。

3,抽象关键字不能和final.private,static关键字共存。


例子:
//定义一个抽象类
abstract class Student 
{
abstract void Study();//不用写{}

}
//定义BaseStudenr类继承Student类
class BaseStudenr extends Student
{
//复写Study方法
void Study()
{
  System.out.println("base study");
}
}
//定义AdvStudenr类继承Student类
class AdvStudent extends Student
{
//复写Study方法
void Study()
{
  System.out.println("adv study");
}
}
class  StudentDemo
{
public static void main(String[] args) 
{
//实例对象
BaseStudenr c1=new BaseStudenr();
c1.Study();//调用方法
//实例对象
AdvStudent c2=new AdvStudent();
c2.Study();//调用方法
}
}

接口
初期理解可以认为是特殊的抽象类,当抽象类中的方法都是抽象的
,那么该类可以通过接口的形式来表示
interface可以用于定义接口


接口定义时,格式特点:
1,接口常见定义:常量,抽象方法。
2,接口中成员都有固定修饰符
     常量:public static final
     方法:public abstract
     接口中成员都是public的。

注意点:
1,接口不可以创建对象,因为有抽象方法。
需要被子类实现,子类对接口中的抽象方法全部覆盖后,
子类才可以实现例化。否则子类是一个抽象类。

2,接口可以被类多实现,也是对多继承不支持的转换形式。
java支持多实现(implements)。


接口的特点:


1,接口是对外暴露的原则
2,接口是程序的功能扩展
3,接口可以用来多实现
4,类与接口之间是实现关系,而且类可以
    继承一个类的同时实现多个接口
5,接口与接口之间可以有继承关系


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

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

  3.抽象类和接口所反映出的设计理念不同。其实抽象类表示的是"is-a"关系,i接口表示的是"like-a"关系。 

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

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

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

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