什么是抽象类:

  当你在定义一个父级的类的时候,往往在父级内的方法没有添加任何内容,这时候如果你在子类里面调用父级的时候,万一在子类之中类名或者方法名没有写正确,会出现不执行的情况,但是这种情况默认是不报错的,此时如果将父级定义为抽象类的时候,子类必须有父类的内容,即写错名称会报错,这时候就体现抽象类的作用了。

  总结两句话来说就是:

  1.父类和子类中,父类的方法有很多情况下是没有内容的。

  2.如果子类重写的时候写错,正常方法不会报错。

抽象类:

用abstract修饰的类叫做抽象类,抽象类不能被实例化,即不能new出来一个抽象类的对象。

抽象方法:

用abstract关键字修饰的方法叫做抽象方法,抽象方法必须定义在抽象类中。

抽象方法有声明,写法为后面不跟花括号,因为抽象方法不知道是给谁定义,所以可以不写函数体。

public abstract class YunSuan {
protected int a;
protected int b; public abstract void QiuZhi();
}

抽象类和抽象方法的关系:

  抽象方法必须定义在抽象类里面。

  如果一个类包含了抽象方法,那么这个类一定要声明成抽象类。

  如果某个类是抽象类,那么这个类既可以包含抽象方法,也可以包含具体的方法(有声明,有实现)。

  抽象类中如果全是具体方法也是允许的;抽象类也可以是空的,即什么也不包含。

抽象类的继承:

  当父类为抽象类的时候,子类继承父类,会出现两种情况,子类是抽象类,子类不是抽象类:

  子类是抽象类的时候:

  子类必须还要在class上定义一个abstract的关键字,子类可以选择实现或者不实现父类的抽象方法,因为抽象类中可以包含抽象方法和具体方法,所以子类中也可以全部写为具体方法,或者写为全部的抽象方法,亦或者抽象方法和具体方法都有。

  子类不是抽象类的时候:

  子类不是抽象类的时候,这时候子类就要全部实例化,也就是要把父类的抽象方法全部实现。这时候子类就不必使用abstract关键字了。

抽象类的具体用途:

  抽象类的抽象方法定义一个规范,或者叫做约定,具体实现交给子类来做。

  因为抽象类的实现可能无法完成或者没有意义。

例:

public abstract class USB {
public abstract void QiDong();
public abstract void TingZhi();
}

先定义一个USB的抽象方法作为父类。

public class UPan extends USB {
public void QiDong(){
System.out.println("U盘启动了");
}
public void TingZhi(){
System.out.println("U盘停止了");
}
}

再定义一个UPan作为实例化子类,将父类的内容全部实例化。

public abstract  class JianPan extends USB {

    public void QiDong() {
// TODO 自动生成的方法存根
System.out.println("键盘启动了");;
} }

再定义一个JianPan作为抽象化子类,只实现父类里面的QiDong。

public class LuoJiJianPan extends JianPan {

    public void QiDong(){
System.out.println("罗技键盘启动");
}
@Override
public void TingZhi() {
// TODO 自动生成的方法存根
System.out.println("罗技键盘停止了");;
} }

最后定义一个LuoJiJianPan作为JianPan的子类,将JianPan继承下来的USB中未实例化的TingZhi实例化,再将JianPan中的QiDong重写。

public class DianNao {
public void USBChaRu(USB usb){
usb.QiDong();
}
public void USBBaChu(USB usb){
usb.TingZhi();
}
}
public static void main(String[] args) {
DianNao d = new DianNao(); LuoJiJianPan pan = new LuoJiJianPan(); d.USBChaRu(pan);
     d.USBBaChu(pan); }

输出一下的结果为:

罗技键盘启动
罗技键盘停止了

Java抽象类的总结的更多相关文章

  1. java抽象类

    Java 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不 ...

  2. Java接口、Java抽象类、C++抽象类的区别

    由于这三种数据类型都是为了创建类层次结构的顶层构架,且用法有些许相似之处,这里简单区分一下: 接口: 接口用interface关键字定义, 名字一般使用-able形式的形容词. 接口通常定义抽象方法和 ...

  3. java抽象类与接口的区别及用法

    java抽象类与接口的区别及用法 一.抽象类里面的方法可以有实现,但是接口里面的方法确是只能声明. 二.接口是设计的结果 :抽象类是重构的结果 . 三.java不支持多重继承,所以继承抽象类只能继承一 ...

  4. Java 抽象类与接口总结

    一.为什么要使用抽象类?有什么好处? 抽象类是通用接口.不同的子类可以用不同的方法表示此接口.通用接口建立起一种基本形式,以此表示所有子类的共同部分. 必须覆写父类abstract抽象的方法  含有抽 ...

  5. JAVA抽象类和接口的深入探讨

    Java 语言中,抽象类(abstract class) 和接口(interface) 是抽象思想的两种体现形式.初学者很容易把这两者搞混,所以Java面试中考抽象类和接口的区别的面试题也常有出现的. ...

  6. java抽象类和接口的区别(转载)

    1.Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点吧,但这个优点非常有用. 如果向一个抽象类里加入 ...

  7. 我对面向对象设计的理解——Java接口和Java抽象类

    在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解. 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有 ...

  8. 第十八节:详解Java抽象类和接口的区别

    前言 对于面向对象编程来说,抽象是它的特征之一. 在Java中,实现抽象的机制分两种,一为抽象类,二为接口. 抽象类为abstract class,接口为Interface. 今天来学习一下Java中 ...

  9. Java抽象类和接口的比较

    一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体 ...

  10. Java - 23 Java 抽象类

    Java 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不 ...

随机推荐

  1. Tomat简介

    Tomcat目录结构bin: 存放各种平台下启动和关闭Tomcat的脚本文件.startup.bat是windows下启动tomcat的文件,shutdown.bat是关闭tomcat的文件.comm ...

  2. 优化Web中的性能

    优化Web中的性能 简介 web的优化就是一场阻止http请求最终访问到数据库的战争. 优化的方式就是加缓存,在各个节点加缓存. web请求的流程及节点 熟悉流程及节点,才能定位性能的问题.而且优化的 ...

  3. 微信测试服务器验证sha1加密法,工具类

    1 package org.fc.Util; import java.security.MessageDigest; import java.security.NoSuchAlgorithmExcep ...

  4. C++-文件【1】-按行读文本文件的两种方法

    测试环境—— 系统:Win7 64bit 编译器:TDM-GCC 4.9.2 64-bit Release #include <iostream> #include <fstream ...

  5. Spring 使用 SLF4J代替 Commons Logging 写日志 异常

    项目的日志更换成slf4j和logback后,发现项目无法启动.错误提示 Caused by: java.lang.NoClassDefFoundError: Lorg/apache/commons/ ...

  6. 《程序员的自我修养》读书笔记 - dllimport

    Math.c  { __declspec (dllexport)  double Add (xx, xx) {...}} MathApp.c  { __declspec(dllimport) doub ...

  7. 洛谷 P2726 阶乘 Factorials Label:Water

    题目背景 N的阶乘写作N!,表示小于等于N的所有正整数的乘积. 题目描述 阶乘会变大得很快,如13!就必须用32位整数类型来存储,到了70!即使用浮点数也存不下了. 你的任务是找到阶乘最前面的非零位. ...

  8. 使用IHTMLDocument2解决弹出"为了让该网站给你提供个人化信息,是否允许在你计算机放置cookie?"

    mshtml可以说是一个不错的解析html利器,对于像我这样一直都是不用webbrowser,直接用socket或者WebRequest进行HTTP通讯 然后再用IHTMLDocument2.writ ...

  9. 遍历datatable的方法

    +方法一:DataTable dt = dataSet.Tables[0];for(int i = 0 ; i < dt.Rows.Count ; i++){string strName = d ...

  10. JQuery的一些简单功能

    JQuery js的缺点总结 1.入口函数只能有一个,如果出现多个,后面的会覆盖掉前面的 2.代码容错性差,容易出错,出错会导致后面的代码不执行 3.存在浏览器兼容性,比如innerText在火狐浏览 ...