抽象类特点:
1,抽象方法一定在抽象中。
2,抽象方法和抽象类都必须被abstract关键字修饰。
3,抽象不可以用new创建对象,因为调用抽象方法没意义。
4,抽象类中的抽象方法要被使用,必须由子类复写所有的抽象方法,建立子类对象。
如果子类只覆盖部分抽象方法,那么子类还是抽象的。
抽象类比一般类多了一个抽象函数。就是在类中定义抽象方法,类不能实例化。
特殊:抽象类中可以不定义抽象方法,仅仅为了不让该类建立对象。
/**
模板方法设计模式。
定义的功能时,一部分是正确的,但一部分是不确定的,而确定的部分在使用不确定的部分。
那么就将不确定的部分暴漏出来,有该类的子类去实现。
*案例: 获取程序运行的时间
*/
abstract class GetTime
{
public final void getTime() //不想被覆盖
{
long start=System.currentTimeMillis();
runcode();
long end = System.currentTimeMillis();
System.out.println("毫秒:"+(end-start));
}
public abstract void runcode(); //不确定的部分暴漏出来。未必是抽象的!
}
class SubTime extends GetTime
{
public void runcode()
{
for(int x=0; x<400; x++)
{
System.out.print(x);
}
}
}
interface接口: interface{}
接口中的成员修饰符是固定的:
成员常量:public static final
成员函数:public abstract
接口中的成员都是:public
接口:是不可以创建对象的,因为有抽象方法。
需要被子类实现,子类对接口中的抽象方法全部都覆盖后,子类才可以实例化。
否则子类是一个抽象类。
接口特点:
是对外暴漏的规则。
是程序的功能扩展
接口可以用来 多继承。
类和接口的关系是实现关系。而且类可以继承一个类的同时实现多个接口。
接口与接口之间可以有继承关系。
interface Sleep
{
void sleep(); //对外暴漏
}
interface Mans extends Sleep
{
void smoke(); //功能扩展
}
interface Man extends Sleep,Mans{ //多继承
}
abstract class Play{
void play(){}
}
class zhangsan extends Play implements Mans,Play{ //继承一个类实现多个接口
@Override
public void smoke() {
}
@Override
public void sleep() {
}
}