黑马程序员---学习抽象类、模版方法模式、接口

---------------------- 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)只有接口和接口之间才有多继承




----------------------  android培训java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值