java的抽象类
现实世界中,人们表征世界时,会把现实世界中的很多类具有相同特征的事物归为一个抽象类。比如水果是许多植物果实的总称,我们可以定义一个苹果类、定义一个西瓜类,可以实例化一个苹果对象,可以实例化一个西瓜对象,我们也可以定义一个水果类,但是你无法实例化一个水果对象,因为水果的实例必定是某个具体的植物果实,这时候,水果类就是一个抽象类,水果类可以被苹果类继承扩展,可以被西瓜类继承扩展,这是水果类的唯一用途。
又比如,如果进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。
抽象类的定义形式:
一般格式如下:
abstract class 类名{
类体
}
说明:
l 抽象类是不能直接实例化对象的类。也即抽象类不能使用new运算符去创建对象。
l 抽象类一般包括一个或几个抽象方法。所谓抽象方法需在abstract修饰符进行修饰,抽象方法只有方法的声明部分,没有具体的方法实现部分。抽象类的子类必须重写父类的抽象方法,才能实例子化,否则子类也是一个抽象类。
l 抽象类中不一定包含抽象方法,但是包含抽象方法的类必须说明为抽象类。
举例:Dog类继承于抽象类Animal。
abstract class Animal{
String name;
Animal(Stringname){ //非抽象方法
this.name=name;
}
void getname(){ //非抽象方法
System.out.println("Animal's name is"+name);
}
abstract void move(); // 抽象方法,用abstract 修饰
}
class Dog extends Animal{
intage;
Dog(String name,int age){
super(name);
this.age=age;
}
void move(){
System.out.println("Dog is running!");
}
void getage(){
System.out.println("Dog is"+age+" years old");
}
}
Public class AbstractDemo{
public static void main(String args[]){
Dogd=new Dog("wangwang",5);
d.move();
d.getname();
d.getage();
}
}
程序运行结果:
Dog is running!
Animal's name is wangwang
Dog is 5 years old
举例二、具有启动(startUp)方法的抽象车辆类Car,其每种具体子类都必须实现其自己的、专属于某种类型车辆的具体启动(startUp)方法
//定义抽象类Car
abstract class Car {
//定义抽象方法startUp
public abstract void startUp();
}
//定义抽象类Audi并使该类继承自Car
abstract class Audi extends Car{
//定义抽象方法turbo
public abstract void turbo();
}
//定义非抽象类Audi_A6继承自Audi
class Audi_A6 extends Audi{
//实现startUp方法
public void startUp() {
System.out.println("调用了奥迪A6的启动功能!!!");
}
//实现turbo方法
public void turbo() {
System.out.println("调用了奥迪A6的加速功能!!!");
}
}
//定义非抽象类Audi_A8继承自Audi
class Audi_A8 extends Audi{
//实现startUp方法
public void startUp(){
System.out.println("调用了奥迪A8的启动功能!!!");
}
//实现turbo方法
public void turbo(){
System.out.println("调用了奥迪A8的加速功能!!!");
}
}
public class AbstractClassDemo{
public static void main(String[] args) {
//创建Audi_A6对象并使该类引用a6指向该对象
Audi_A6 a6=new Audi_A6();
//调用Audi_A6对象中的方法
a6.startUp();
a6.turbo();
//创建Audi_A8对象并使该类引用a8指向该对象
Audi_A8 a8=new Audi_A8();
//调用Audi_A8对象中的方法
a8.startUp();
a8.turbo();
}
}
程序执行结果:
调用了奥迪A6的启动功能!!!
调用了奥迪A6的加速功能!!!
调用了奥迪A8的启动功能!!!
调用了奥迪A8的加速功能!!!
java的抽象类的更多相关文章
- JAVA:抽象类VS接口
JAVA中抽象类和接口的区别比较,以及它们各自的用途. 1.JAVA抽象类: 抽象类除了不能实例化以外,跟普通类没有任何区别.在<JAVA编程思想>一书中,将抽象类定义为“包含抽象方法的类 ...
- 转:二十一、详细解析Java中抽象类和接口的区别
转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...
- 关于JAVA中抽象类和接口的区别辨析
今天主要整理一下新学习的有关于Java中抽象类和接口的相关知识和个人理解. 1 抽象类 用来描述事物的一般状态和行为,然后在其子类中去实现这些状态和行为.也就是说,抽象类中的方法,需要在子类中进行重写 ...
- [ Java学习基础 ] Java的抽象类与接口
一.抽象类 1. 抽象类 Java语言提供了两种类:一种是具体类:另一种是抽象子类. 2. 抽象类概念: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的 ...
- java中抽象类的定义和使用
java虽然比较简单,但是细节的知识点还是很多的,现在,介绍一下抽象类的定义和实现基础. 指的是在类中定义方法,而不去实现它,而在它的子类中去具体实现,继承抽象类的子类必须实现父类的抽象方法,除非子类 ...
- Java基础-抽象类和接口
抽象类与接口是Java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 抽象定义: 抽象 ...
- JAVA的抽象类和接口
抽象类 在面向对象的概念中,所有的对象都是通过类来描述的,但是反过来,并不是所有的类都是用来描述对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不能实例化对 ...
- Java中抽象类也能实例化
在Java中抽象类真的不能实例化么? 在学习的过程中,发现了一个问题,抽象类在没有实现所有的抽象方法前是不可以通过new来构建该对象的,但是抽象方法却是可以有自己的构造方法的.这样就把我搞糊涂了,既然 ...
- Java中抽象类也能实例化.RP
在Java中抽象类真的不能实例化么? 在学习的过程中,发现了一个问题,抽象类在没有实现所有的抽象方法前是不可以通过new来构建该对象的,但是抽象方法却是可以有自己的构造方法的.这样就把我搞糊涂了,既然 ...
- Java 中抽象类与接口的区别
TypeScript 中的接口,有点类似抽象类的概念.Java 中抽象类属于包含属性与抽象行为,而接口通常只是抽象行为.抽象类可以实现模板模式. 参考 https://www.cnblogs.com/ ...
随机推荐
- 动态sql构建的过程
基本原理:使用xsqlbuilder框架完成动态sql的构建. 基本流程:使用WebUtils.getParametersStartingWith(ServletActionContext.getRe ...
- 深入A标签点击触发事件而不跳转的详解
本文介绍下,当点击A标签时,触发事件但不跳转的实现方法,有需要的朋友参考下吧. 点击页面上的空链接,点击后页面自动刷新,并会定位到页面顶端. 不过,有时需要点击#页面但不作跳转,可以这样写: < ...
- php数组排序和分割字符串
function sortStr($str){ $ary = str_split($str); sort($ary); $len = count($ary); $arr = array(); for( ...
- 全数字锁相环(DPLL)的原理简介以及verilog设计代码
随着数字电路技术的发展,数字锁相环在调制解调.频率合成.FM 立体声解码.彩色副载波同步.图象处理等各个方面得到了广泛的应用.数字锁相环不仅吸收了数字电路可靠性高.体积小.价格低等优点,还解决了模拟锁 ...
- 【Chromium中文文档】Profile架构(看看谷歌家的重构)
进程模型 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Profile_ ...
- linux----命令替换
0.命令替换.它的大概意思是.命令在脚本中只起一个站位符的作用:在命令运行时它会被命令自己的执行结果所替换. 1.使用格式: 1.$(command) 2.`command` 2.使用举例: 1.:打 ...
- SAR图像与光学图像区别
按传感器采用的成像波段分类,光学图像通常是指可见光和部分红外波段传感器获取的影像数据.而SAR传感器基本属于微波频段,波长通常在厘米级.可见光图像通常会包含多个波段的灰度信息,以便于识别目标和分类提取 ...
- 今天在发布IIS站点的时候遇到了一些问题
1.HTTP 错误 500.23 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置. 分析:一般5XX的错误都是服务器的问题,这里把应用程序池 ...
- City Game(动态规划)
City Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- JS判断是否安装flash player及当前版本
function flashChecker() { var hasFlash = 0; //是否安装了flash var flashVersion = 0; //flash版本 if(document ...