---------------------- android培训、java培训、期待与您交流! ----------------------
抽象类:abstract
特点:
(1)抽象方法一定在抽象类中。
(2)抽象方法和抽象类都必须被abstract关键字修饰。
(3)抽象类不可以用new创建对象。因为抽象方法没意义。
(4)抽象类中的抽象方法要被使用,必须由子类覆写所有的抽象方法后,建立子类对象调用。如果子类只覆盖部分抽象方法,那么该子类还是一个抽象类。
抽象类和一般类没有太大的不同
该如何描述事物还怎样描述,只是该事物出现了一些看不懂的东西。
这些不确定的部分,也是该事物的功能,需要明确出现,但是无法定义主体,就通过抽象方法来表示。
抽象类比一般类多了个抽象函数。
抽象类不可以实例化。
特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。
class Employee//父类
{
private String name;
private String id;
private double pay;
Employee(String name,String id,double pay)
{
this.name=name;
this.id=id;
this.pay=pay;
}
public abstract void work();
}
class Manager extends Employee//经理类
{
private int bonus;
Manager(String name,String id,double pay,int bonus)
{
super(name,id,pay)
this.bonus=bonus;
}
public void work()
{
System.out.println("manager work");
}
}
class Pro extends Empolyee//普通员工类
{
Pro(String name,String id,double pay)
{
super(name,id,pay)
}
public void work()
{
System.out.println("pro work");
}
}
模版方法模式:
/*
获取程序运行的时间
用System.currentTimeMillis();
*/
class GetTime
{
public void getTime()
{
long start=System.currentTimeMillis();
runcode();//调用runcode()
long end=System.currentTimeMillis();
System.out.println("毫秒"+(end-start));
}
public void runcode()
{
for (int x=0;x<1000 ;x++ )
{
System.out.println(x);
}
}
}
class SubTime extends GetTime
{
public void runcode()//重写runcode
{
for (int x=0;x<4000 ;x++ )
{
System.out.println(x);
}
}
}
class TemplateDemo
{
public static void main(String[] args)
{
//GetTime gt=new GetTime();
SubTime gt=new SubTime();
gt.getTime();
}
}
优化成:
/*
获取程序运行的时间
用System.currentTimeMillis();
*/
abstract class GetTime
{
public final void getTime()//有final不可以覆写该方法
{
long start=System.currentTimeMillis();
runcode();//调用runcode()
long end=System.currentTimeMillis();
System.out.println("毫秒"+(end-start));
}
public abstract void runcode();//抽象方法
}
class SubTime extends GetTime
{
public void runcode()//覆写runcode
{
for (int x=0;x<4000 ;x++ )
{
System.out.println(x);
}
}
}
class TemplateDemo
{
public static void main(String[] args)
{
//GetTime gt=new GetTime();
SubTime gt=new SubTime();
gt.getTime();
}
}
这就是模版方法设计模式。
什么是模版方法呢?
在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出来,由该类的子类完成。
4.8 接口
格式:interface{}
接口中的成员修饰符是固态的。
成员常量:public static final
成员函数:public abstract
接口的出现将“多继承”通过另一种形式体现出来的,即“多实现”。
接口:初期理解,可以认为是一种特殊的抽象类。
当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。
Class 用于定义类
Interface 用于定义接口
接口定义时,格式特点:
1.接口中常见定义:常量,抽象方法。
2.接口中的成员都有固定修饰符。
常量:public static final
方法:public abstract
接口中的成员都是public的。
Implements 实现
接口:是不可以创建对象的,因为有抽象方法。
需要被子类实现,子类对接口中的抽象方法全部覆盖后,子类才可以实例化。
否则子类是一个抽象类。
(1)接口是对外暴露的规则
(2)接口是程序的功能扩展
(3)接口可以被类多实现
(4)接口和接口之间、类与类之间是继承关系,类与接口之间是实现关系
(5)只有接口和接口之间才有多继承
详细请查看:http://edu.csdn.net/heima