黑马程序员_面向对象之抽象类与接口

抽象类(abstract)????

当编写一个类时,时常会为该类定义一些方法,这些方法的使用用以描述该类的行为方式,那么这些方法都有具体的方法体。但是在某些情况下,某个父类只是知道子类应该包含怎样的放过,但是无法精确的知道这些子类是如何实现这些方法,例如定义一个GetTime类,该类提供了一个计算某一段程序运行时间的gettime方法,但是无法知道具体运行什么方法体,这时就需要使用抽象方法来实现了。

抽象类概念

当多个类中出现相同功能,但是功能主体不同,这时候可以进行向上抽取,只抽取功能定义,而不抽取功能主体。分析事物不确定时,就抽象。

特点:

1.抽象方法只能定义在抽象类中。

2.抽象方法和抽象类必须被abstract修饰

3.抽象类不可以用new 创建对象,因为创建对象没有意义

4.抽象类中的抽象方法要被使用,必须由子类复写抽象方法后,建立子类对象调用

5.如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。如果不想子类是抽象类必须,复写父类抽象类中的全部抽象方法。

什么时候使用抽象:

抽象类和一般类没有太大的区别,当事物出现不确定的功能,需要明确指出,但是无法定义主体,通过抽象方法来表示

抽象类比一般类多了个抽象方法,抽象类不可以实例化,抽象类中还可以定义非抽象方法,目的是不让该类建立对象

抽象类成员

抽象类可以包含 普通方法、 成员变量、
构造方法。

抽象格式特点

????在需要抽象的方法上用abstract进行修饰,同时该方法没有方法体,结尾‘;‘结尾。

应用:

下面程序展示了用抽象定义一个获取某一段程序运行时间的方法。

????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<1000;x++){

????????????????System.out.println(x);

????????????}

????????}

????}

注意事项:

  1. 不能与 final 一起使用:抽象是用来继承的所以不可以与final同时使用。
  2. 不能与private一起使用: 抽象类中的私有的抽象方法,不被子类所知,就无法被复写。而抽象方法出现的就是需要被复写。
  3. 不能与 static 一起使用:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了。可是抽象方法运行没意义。
  4. 抽象类该怎样描述事物就怎么描述,只是有一些内容"看不懂",所以可以有包含成员变量与方法,构造方法。
  5. 如果一个类中存在抽象方法,那么该类一定要用abstract修饰(该类一点是抽象类)

接口(interface)

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

时间: 2024-08-19 13:40:34

黑马程序员_面向对象之抽象类与接口的相关文章

黑马程序员_面向对象解决的一个小问题,觉得还好,就存一下

/** *10. 一位老农带着猫.狗.鱼过河,河边有一条船,每次老农只能带一只动物过河. *当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题. *编程解决猫狗鱼过河问题. * *分析: * 问题中的对象:猫.狗.鱼.老农.岸1(这岸).岸2(对岸) * * * 限制条件是:老农每次只能带一只动物过河 * 老农不在时,狗咬猫 * 老农不在时,猫吃鱼 * 目标是:将猫.狗.鱼从这岸运到对岸. * 当农夫到达一个岸后,即为一个中间状态,则这个中间状态需要满足,岸

黑马程序员_面向对象基础

1.类和对象 面向对象技术,也简称OOP.前面说了,它是一个编程思想,既然是思想,它就适用于任何支持面向对象编程的语言.虽然不同的面向对象语言都有其各自的特点,但是万变还是不离其宗的. 1.什么是类? 首先了解几个概念,什么是类?这个其实很容易理解,在现实中我们常说,物以类聚.人以群分.这里的类,和我要解释的类,概念上是一样的,都是现实中一些拥有共同属性.特征的事物.就像,人类,犬类,猫类等,它们通常都是抽象的描述了,一类事物,不是具体指的指某一个,人啊,狗啊,猫啊,这样的,而是它们的统称. 定

黑马程序员_面向对象

------- <a href="http://www.itheima.com" target="blank">android培训</a>.<a href="http://www.itheima.com" target="blank">java培训</a>.期待与您交流! ---------- 在Java的开发过程,其实就是不断的创建对象,使用对象,指挥对象做事情.设计的过程,其

黑马程序员_面向对象基础之封装与继承

-----Java培训.Android培训.iOS培训..Net培训.期待与您交流! 封装 1.1 基本概念  封装(encapsulation)是面向对象三大特征之一,它是指将对象的状态信心隐藏在对象的内部,不允许外部直接进行访问,而是通过该类提供的方法来实现对内部信息的操作和访问.封装的作用如下: ※ 隐藏类的实现细节. ※ 让使用者只能通过实现预定的方法来访问数据,从而可以在方法里添加逻辑控制,限制对类成员的不合理访问 ※ 可以进行检查,从而有利于保证对象信息的完整性. ※ 便于修改,提高

黑马程序员_面向对象深入2

1.抽象类 抽象类是一个类的抽象化描述,和普通类的定义成员的方法一样,只是如果要定义抽象成员的话,则需要使用到abstract关键字.通常在程序的设计中,把主体的类功能放在抽象类中,让其它类去继承.抽象类不能被实例化,除了使用多态性.所以它的天性就是被别人所继承: 定义示例: abstract class Animal{ private string name; private string color; private int age; //属性 public string Name{ set

黑马程序员_面向对象与类的分析

一.面向对象的概述: java是一种面向对象的编程语言,也就是说对象是这种语言的基础,没有对象了,就没有了java.任何功能都是通过对象来实现的,就是将功能封装进对 象,让对象去调用这些功能.这种思想是将数据作为第一位,而方法(功能或者说是算法)作为其次.我个人认为,这是对数据的一种优化,安全性更高,操作起数据来一更方便. 那么将这种思想提升到一种境界就是:万物皆对象. 1.对面向对象的理解: 1)面向对象是相对面向过程而言的,且基于面向过程的. 2)面向对象是一种思想. 3)面向对象将功能封装

黑马程序员_毕向东_Java基础视频教程_Java基础学习知识点总结

黑马程序员_毕向东_Java基础视频教程 Java基础学习知识点总结 2016年01月06日  day01 一.基础知识:软件开发 1.什么是软件?软件:一系列按照特定顺序组织的计算机数据和指令的集合. 2.常见的软件:系统软件:如:DOS,Windows,Linux等.应用软件:如:扫雷,迅雷,QQ等. 3.什么是开发?制作软件. 二.基础知识:人机交互方式 4.软件的出现实现了人与计算机之间的更好的交互. 5.交互方式:图形化界面:这种方式简单直观,使用者易于接受,容易上手操作.命令行方式:

黑马程序员_交通灯管理系统

(1)项目的需求 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 例如: 由南向而来去往北向的车辆 右转车辆 由东向而来去往南向的车辆 ---- 左转车辆 平时开车过十字路口红绿灯的时候,也知道红绿灯运行的顺序 (1)任何方向的车,向右边转弯的时候,是不需要看红绿灯 (2)在十字路口,相对方向的红绿灯的工作方式是一样的,南相对与北,东相对与西,这把它分成两对 (3)红绿灯顺序,一对直行通道绿灯直行车辆,等直行变红,还是这对的车辆可以左转,等左转变红,就轮到下一对了.所以在设计程序的时候,只

黑马程序员_银行业务调度系统

1,项目的具体需求 银行业务调度系统 模拟实现银行业务调度系统逻辑,具体需求如下: 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口. 有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费.电话费之类业务的客户). 异步随机生成各种类型的客户,生成各类型用户的概率比例为: VIP客户 :普通客户 :快速客户 = 1 :6 :3.   客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,快速