Java抽象类的总结
什么是抽象类:
当你在定义一个父级的类的时候,往往在父级内的方法没有添加任何内容,这时候如果你在子类里面调用父级的时候,万一在子类之中类名或者方法名没有写正确,会出现不执行的情况,但是这种情况默认是不报错的,此时如果将父级定义为抽象类的时候,子类必须有父类的内容,即写错名称会报错,这时候就体现抽象类的作用了。
总结两句话来说就是:
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抽象类的总结的更多相关文章
- java抽象类
Java 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不 ...
- Java接口、Java抽象类、C++抽象类的区别
由于这三种数据类型都是为了创建类层次结构的顶层构架,且用法有些许相似之处,这里简单区分一下: 接口: 接口用interface关键字定义, 名字一般使用-able形式的形容词. 接口通常定义抽象方法和 ...
- java抽象类与接口的区别及用法
java抽象类与接口的区别及用法 一.抽象类里面的方法可以有实现,但是接口里面的方法确是只能声明. 二.接口是设计的结果 :抽象类是重构的结果 . 三.java不支持多重继承,所以继承抽象类只能继承一 ...
- Java 抽象类与接口总结
一.为什么要使用抽象类?有什么好处? 抽象类是通用接口.不同的子类可以用不同的方法表示此接口.通用接口建立起一种基本形式,以此表示所有子类的共同部分. 必须覆写父类abstract抽象的方法 含有抽 ...
- JAVA抽象类和接口的深入探讨
Java 语言中,抽象类(abstract class) 和接口(interface) 是抽象思想的两种体现形式.初学者很容易把这两者搞混,所以Java面试中考抽象类和接口的区别的面试题也常有出现的. ...
- java抽象类和接口的区别(转载)
1.Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点吧,但这个优点非常有用. 如果向一个抽象类里加入 ...
- 我对面向对象设计的理解——Java接口和Java抽象类
在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解. 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有 ...
- 第十八节:详解Java抽象类和接口的区别
前言 对于面向对象编程来说,抽象是它的特征之一. 在Java中,实现抽象的机制分两种,一为抽象类,二为接口. 抽象类为abstract class,接口为Interface. 今天来学习一下Java中 ...
- Java抽象类和接口的比较
一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体 ...
- Java - 23 Java 抽象类
Java 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不 ...
随机推荐
- [转载] 构造linux 系统下免密码ssh登陆 _How to establish password-less login with SSH
In present (post production) IT infrastructure many different workstations, servers etc. have to be ...
- 各大IT技术博客排行榜
cnblogs 积分排名前3000名 http://www.cnblogs.com/ 左侧有推荐博客排行 cppblog http://www.cppblog.com/AllBloggers.aspx ...
- Canvas 最佳实践(性能篇)
Canvas 想必前端同学们都不陌生,它是 HTML5 新增的「画布」元素,允许我们使用 JavaScript 来绘制图形.目前,所有的主流浏览器都支持 Canvas. Canvas 最常见的用途是渲 ...
- 2分钟 sublime设置自动行尾添加分号并换行:
18:03 2016/4/162分钟 sublime设置自动行尾添加分号并换行:注意:宏文件路径要用反斜杠/,2个\\会提示无法打开宏文件.不需要绝对路径很简单利用宏定义:1.录制宏:由于是录制动作宏 ...
- PLSQL配置新的oracle实例
在Win环境下的Oracle中,D:\Oracle\product\10.1.0\db_1\NETWORK\ADMIN\tnsnames.ora文件很重要,它作用是:本地命名的配置.本地名可以用简单的 ...
- 怎么取得dropdownlist选中的ID值
把数据库绑定在dropdownlist中,然后把选中的dropdownlist的项的ID值保存在另外的一个数据库中.怎么取得dropdownlist选中的ID值呢?? this.DropDownLis ...
- 模块化管理工具兼打包工具 webpack
webpack 是一个[模块化管理工具]兼[打包工具] 是一个工具(和seajs,requirejs管理前端模块的方式是不一样) 在webpack一个文件就是一个模块! seajs,requirejs ...
- C# Listview 数据绑定
今天搞Winform,有串数据需要绑定到TabControl里面,原来用datatable,组长说这玩意会有问题不让用,菜鸟实在不会,百度查的Listview用法,写了个数组进去绑定 using Sy ...
- 【转】Polya定理
转自:http://endlesscount.blog.163.com/blog/static/82119787201221324524202/ Polya定理 首先记Sn为有前n个正整数组成的集合, ...
- 三、jquery操作DOM
DOM(Document Object Model, 文档对象模型)为文档提供了一种结构化的表示方法,通过该方法可以改变文档的内容和展示形式.在实际运用中,DOM更像是桥梁,通过它可以实现跨平台.跨语 ...