一、抽象类
1. 定义抽象类一定要用abstract指明是抽象类,可以用public修饰抽象类,也可以不用任何修饰符修饰。即只有public abstract 类名 以及 abstract 类名
(注意:abstract public 类名 也是合法的,即访问权限控制符和其它修饰符都可以交换位置)两种定义方式是合法的,其他的如protected,private,final都不能修饰外部抽象类。
(扩展知识:修饰符是可以交换位置的,不管是修饰 类,方法,变量,常量,抽象类,接口等等,修饰符都可以相互交换位置。)
2.
abstract class AbstractTest {//抽象类前一定要加上abstract,访问控制符要么缺省,要么只能是public
属性 -------------(可以有也可以没有)
构造方法 -------------(可以有也可以没有)
一般成员方法 ---------- (可以有也可以没有)
抽象方法 ---------- (可以有也可以没有)
//抽象方法前一定要加上abstract, 访问控制修饰要么缺省,要么只能protected或者public
}//抽象类与普通类唯一的区别就是多了抽象方法,其它的都跟普通类一样,包括修饰符的使用也是一样的。
3. 抽象类不能直接实例化:
即使里面没有抽象方法,也不能实例化。
abstract class AbstractTest {
}//合法(抽象类的一种极端情况,类中什么都没有,但是也要用abstract指明是抽象类)
但是同样不能实例化,AbstractTest abs = new AbstractTest();//非法
4. 抽象类可以通过父类声明指向子类对象去实例化:
格式:抽象类 对象名 = new 子类构造方法
二、接口
1. 接口就是一个特殊的抽象类
a)里面的方法全部是抽象方法
b)接口中只可以有公共静态常量和公共抽象方法的定义,或者二选一,或者里面什么都没有定义(即该接口只是一个标识接口,如java.io.Serializable就是一个标识接口)。
接口:
(abstract) interface 接口名 { //interface默认是一个特殊的抽象类。要么缺省(不
加任何修饰符。同一包中可以访问),要么只能加public修饰(即包内和包外全部可见)
(public static final ) 常量 -------------- 默认就是public static final ,即公共
静态常量。(不管接口有没有用public修饰)
(public abstract) 抽象方法 --------------- 默认就是公共抽象方法。(不管接口
有没有用public修饰)
}
c)与抽象类相比,接口没有成员变量、构造方法、一般成员方法。
2. 现代企业开发中,用接口最为普遍,抽象类使用较少。现在的web开发中,用接口取代了大部分的抽象类。
3. 接口不能直接实例化。实现了接口的类可以实例化,可以使用父类声明指向子类对象。
格式:
接口 对象名 = new 类构造方法
4. java中一个类可以实现多个接口,从而通过接口“近似”实现“多继承”,以解决单继承过于单一的问题。强调:java永远是单继承。
5. 如果一个类实现了多个接口,当创建对象的时候,一定要当心父类声明指向子类对象的时候,不能访问子类独有的方法。在企业开发中,如果一个类实现了多个接口,则实例化时,直接使用子类声明创建对象。
6. 接口是可以多继承的。
一般框架开发喜欢用接口多继承,最明显是Spring框架。我们去公司的话,很少很少很少使用接口多继承。
7.注意:接口不能实现接口(包括:即使是标识接口也是不能被一个接口实现,如: java.io.Serializable也是不能被一个接口实现的)。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29263789/viewspace-774700/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29263789/viewspace-774700/