黑马程序员技术交流社区

标题: java自学第七天,知识点总结(2) [打印本页]

作者: 支离疏者    时间: 2015-5-13 23:10
标题: java自学第七天,知识点总结(2)
三、抽象类
1.抽象:抽象类的特点,
   1.抽象方法一定定义在抽象类中
   2.抽象方法和抽象类都必须被abstract关键字修饰
   3.抽象类不可以用new创建对象,因为调用抽象方法没意义
   4.抽象类中的方法要被使用,必须由子类复写其所有的抽象方法后,建立子类对象调用,如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类
2.抽象类和一般类没有太大的不同。
该如何描述事物,就如何描述事物,只不过,该事物出现了一些看不懂的东西。
这些不确定的部分,也是该事物的功能,需要明确出现。但是无法定义主体。
通过抽象方法来表示。

抽象类比一般类多个了抽象函数。就是在类中可以定义抽象方法。
抽象类不可以实例化。
abstract 关键字,和哪些关键字不能共存。
final:被final修饰的类不能有子类。而被abstract修饰的类一定是一个父类。
private: 抽象类中的私有的抽象方法,不被子类所知,就无法被复写。
而抽象方法出现的就是需要被复写。
static:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了。
可是抽象方法运行没意义。

抽象类中是否有构造函数?
有,抽象类是一个父类,要给子类提供实例的初始化。
4./*
需求:获取一段程序运行的时间。
原理:获取程序开始和结束的时间并相减即可。
获取时间:System.currentTimeMillis();
当代码完成优化后,就可以解决这类问题。
这种方式,模版方法设计模式。
什么是模版方法呢?
在定义功能时,功能的一部分是确定的,但是有一部分是不确定,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去。由该类的子类去完成。
*/
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<4000; x++)
{
System.out.print(x);
}
}
}
class  TemplateDemo
{
public static void main(String[] args)
{
//GetTime gt = new GetTime();
SubTime gt = new SubTime();
gt.getTime();
}
}

四、接口
1.接口:初期理解,可以认为是一个特殊的抽象类
               当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。         
           Interface
            接口定义时:格式特点:
            1.接口中常见定义:常量,抽象方法。
            2.接口中的成员都有固定修饰符。
               常量:public static final
               方法:public abstract
      接口中的成员都是public的。
2.类与类时利用extends继承的,但是类和接口时利用implements进行实现的
3.接口:是不可以创建对象的,因为有抽象方法。
      需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化。
      否则子类是一个抽象类。
      接口可以被类多实现,也是对多继承不支持的转换形式。java支持多实现。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2