全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

java 抽象类的实例详解

java 抽象类的实例详解

前言:

什么是抽象类?这名字听着就挺抽象的,第一次听到这个名字还真有可能被唬住。但是,就像老人家所说的,一切反动派都是纸老虎,一切有着装x名字的概念也是纸老虎。好吧,我们已经从战略上做到了藐视它,现在就要战术上重视它,如同要解决纸老虎,就要一个牙齿一个牙齿地敲,一个爪子一个爪子地拔;解决这种抽象概念也一样,先要把它具体化,细分化,然后一个一个地来。

我一般遇到新的概念都会问三个问题:

1.这个东西有什么用?用来干什么的?它的意义在哪里?(显然,如果是没用的东西,就没必要浪费时间了;其实,弄懂了这个问题,就掌握了60%)

2.这个概念或者技能点怎么用?也就是它的表现形式,如关键字、修饰词、语法什么的。。。(这个占20%)

3.这个东西在用的过程中,有哪些关键点和细节点?(是的,也占20%)

上面三个问题搞清楚了,剩下的就是去用了。。。“无他,但手熟尔。”

一、第一个问题:抽象类有什么用?它存在的意义是什么?

这回答这个问题之前,先看一下动物界里的一个例子:首先,有一个父类Animal,接着有两个子类,分别是鸟Bird和狗Dog,如下:

public class Animal{
  public void bark(){}
}
public class Bird extends Animal{
  public void bark(){
    System.out.println("唧唧~唧唧~");
  }
}
public class Dog extends Animal{
  public void bark(){
    System.out.println("汪汪~汪汪~");
  }
}

可以看到,父类Animal有一个叫唤的方法bark(),两个子类都继承了这个方法,并进行了重写,Bird是唧唧叫,Dog是汪汪叫,现在的问题是Animal怎么叫?它的bark()方法体里应该输出什么样的叫声,是“汪汪”还是“唧唧”?

显然,动物是个抽象的集合名词,我们并不知道动物Animal怎么叫,所以,bark()方法在父类中实现不了,或者说实现了没有任何意义,bark()方法只能在子类中根据具体情况去实现。这样的话就可以把父类Animal中的bark()方法声明为abstract抽象方法,此时这个类也成了abstract抽象类。

至此,也就可以回答第一个问题,抽象类用来做什么的?抽象类自己并不能实例化,它存在的意义就是为了让子类继承。对于一个父类,它的某个方法在父类中实现没有任何意义,必需在子类中根据具体情况实现,那么这个方法可以声明为abstract抽象方法,此时这个父类也成了abstract抽象类。(当然,你也许会想,就像上面那样,函数的花括弧里为空不也可以?是的,语法上没毛病,甚至用法上也没毛病,但一般还是把它抽象成abstract方法。原因有三点:1.就像上面说的,这样弄“实现了没有任何意义”;2.Java里面不鼓励函数体的内容为空;3.用法上子类继承父类后,子类会被强制重写父类中的抽象方法,起到一个提醒和约束的作用。)

二、第二个问题:抽象类怎么用?表现形式是什么样的?

这个问题相对简单,就是语言设计者的一些规定,Java中规定用abstract来修饰抽象方法和抽象类。上面的Animal类写成如下形式:

 public abstract class Animal{
   public abstract void bark();
}

三、第三个问题:抽象类在用的过程中有哪些关键点?

抽象类并不是只能包含抽象方法,他也可以包含普通的成员方法和成员变量。它和普通类的区别主要有三点:

1.抽象类中的抽象方法只能用public或protected修饰。因为,抽象方法来到世间就是为了让子类继承重写的,而private属性的方法不能被子类继承,显然矛盾。

2.抽象类不能创建对象,即不能实例化。因为,抽象类中包含没有实现的抽象方法,是不完整的,所以不能用来创建对象。(有一种特殊情况,就是一个类中并没有抽象方法,但是类class有abstract修饰,被声明为抽象类,那么这个类也是抽象类,也不能实例化。)

3.如果一个类继承于一个抽象类,那么子类必须实现父类的抽象方法。否则,子类继承的方法还是抽象方法,子类也变成了抽象类,要用abstract修饰。(这就好比父母从小 have a dream,就是考大学,但是由于他们生活的年代、环境、个人能力等因素,总之没实现,于是他们将这个梦想让自己孩子继承,并要求他们实现,至于你具体是考清华大学,还是考长江大学,那就 Let it be 了。。。当然,如果儿子不实现,就会变成抽象类,再让孙子继承和实现。。。)

在其他方面,抽象类和普通类并无区别。最后,再来个例子:

public abstract class Animal {  //抽象类中可以有非抽象方法,也可以有成员变量
  private int a = 10;
  
  public abstract void bark();      //如果没有此抽象方法,但是class前有absract修饰,也是抽象类,也不能实例化
  public void say() {            //普通成员方法
    System.out.println("我是抽象类中的非抽象方法,此抽象类中的私有成员变量a= " + a);
  }

  public int getA() {
    return a;
  }
  public void setA(int a) {
    this.a = a;
  }
}
public class Dog extends Animal{
  public void bark() {        //子类实现Animal的抽象方法
    System.out.println("汪汪~汪汪~");  
    System.out.println("我是子类,不能直接调用父类的私有变量a  :(");  
    System.out.println("我是子类,只有通过super.getA()调用父类的私有变量a:" + super.getA());  
  }
}
public class Test {
  public static void main(String[] args) {
    Dog dog = new Dog();
    dog.say();    //子类继承调用Animal的普通成员方法
    dog.bark();    //子类调用已经实现过的方法
  }
}

以上就是对java抽象类的实例详解,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# java抽象类  # java抽象类的使用方法  # java抽象类详解  # Java的抽象方法和抽象类实例详解  # Java中抽象类用法与注意点实例详解  # Java接口和抽象类用法实例总结  # 简单学习Java抽象类要点及实例  # Java中接口和抽象类的区别与相同之处  # Java中的接口和抽象类用法实例详解  # java中抽象类、抽象方法、接口与实现接口实例详解  # Java 抽象类定义与方法实例详解  # Java接口和抽象类实例分析  # java 抽象类与接口的区别总结  # java 抽象类和接口的区别详细解析  # Java抽象类的构造模板模式用法示例  # 子类  # 抽象类  # 类中  # 我是  # 就像  # 没有任何  # 这个问题  # 重写  # 成了  # 第一个  # 三点  # 什么用  # 表现形式  # 为空  # 过程中  # 有一个  # 都是  # 实现了  # 根据具体情况  # 就会 


相关文章: 建站之星×万网:智能建站系统+自助建站平台一键生成  如何快速配置高效服务器建站软件?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  ,怎么在广州志愿者网站注册?  建站之星安装步骤有哪些常见问题?  视频网站制作教程,怎么样制作优酷网的小视频?  建站之星如何配置系统实现高效建站?  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  定制建站流程解析:需求评估与SEO优化功能开发指南  如何在七牛云存储上搭建网站并设置自定义域名?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  威客平台建站流程解析:高效搭建教程与设计优化方案  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  济南专业网站制作公司,济南信息工程学校怎么样?  想学网站制作怎么学,建立一个网站要花费多少?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  专业公司网站制作公司,用什么语言做企业网站比较好?  建站之星如何助力网站排名飙升?揭秘高效技巧  宝塔建站无法访问?如何排查配置与端口问题?  h5在线制作网站电脑版下载,h5网页制作软件?  电商平台网站制作流程,电商网站如何制作?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  广德云建站网站建设方案与建站流程优化指南  一键网站制作软件,义乌购一件代发流程?  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  建站168自助建站系统:快速模板定制与SEO优化指南  高性价比服务器租赁——企业级配置与24小时运维服务  C++中引用和指针有什么区别?(代码说明)  建站ABC备案流程中有哪些关键注意事项?  如何在宝塔面板中创建新站点?  如何在万网ECS上快速搭建专属网站?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  建站之星安装后如何配置SEO及设计样式?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  深圳网站制作培训,深圳哪些招聘网站比较好?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  如何在景安云服务器上绑定域名并配置虚拟主机?  详解jQuery停止动画——stop()方法的使用  香港服务器网站卡顿?如何解决网络延迟与负载问题?  建站主机如何安装配置?新手必看操作指南  如何在阿里云香港服务器快速搭建网站?  小型网站制作HTML,*游戏网站怎么搭建?  如何通过IIS搭建网站并配置访问权限?  建站之星伪静态规则如何正确配置? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。