A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© dongyangzhang 中级黑马   /  2013-4-20 19:46  /  1298 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 dongyangzhang 于 2013-4-20 21:58 编辑

复习毕老师的PDF的时候遇到的,
抽象类中是否有构造函数?
抽象关键字abstract不可以和哪些关键字 共存?
抽象类中可不可以没有抽象方法?
回顾的时候没有印象了,请帮忙回忆下,谢谢了。

同时请帮忙举个抽象类的例子:根据内容设计继承体系
内容:
具体事物:医生,护士
共性:姓名,所属院室,对待病人

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 刚金波 于 2013-4-20 20:39 编辑

回答:
抽象类中是有构造函数的,因为抽象类要被继承,如果子类实现了抽象类的全部方法,那么这个子类就可以实例化对象,这就要用到构造函数。
抽象函数不能跟private、static、final这三个关键字共存。因为,private、final修饰的方法是不能被继承的,违背了我们使用抽象类的初衷,static关键字修饰的静态方法是可以直接被类调用的方法,与
abstract关键字同时使用的话,因为抽象方法是没有方法体的,这个方法就没意义了。
抽象类中可以没有抽象方法,但是抽象方法必须写在抽象类中。
例子:
  1. abstract class yihugongzuozhe
  2. {
  3. String name;
  4. String department;
  5. public abstract void work();
  6. }
  7. class doctor extends yihugongzuozhe
  8. {
  9.         doctor(String name,String department)
  10.         {
  11.                 this.name=name;
  12.                 this.department=department;
  13.         }
  14.         public void work()
  15.         {
  16.                 System.out.println(this.department+" "+this.name+" "+"给病人看病");
  17.         }

  18. }
  19. class nurse extends yihugongzuozhe
  20. {
  21.         nurse(String name,String department)
  22.         {
  23.                 this.name=name;
  24.                 this.department=department;
  25.         }
  26.         public void work()
  27.         {
  28.                 System.out.println(this.department+" "+this.name+" "+"照顾别人吃药休息");
  29.         }

  30. }
  31. public class Hospital
  32. {
  33.         public static void main(String []args)
  34.         {
  35.                 doctor d1=new doctor("李良","心脑科");
  36.                 d1.work();
  37.                 nurse n1=new nurse("蔡叶","妇产科");
  38.                 n1.work();
  39.         }
  40. }
复制代码
这是我写的,把你要求的第三个内容改成了所做工作,这个大致应该能说明问题了,但是如果要细化区分哪个科室的医生和护士就需要进行扩展了,我觉得可通过定义接口来实现。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 殇_心。 于 2013-4-20 20:27 编辑

抽象类中有构造函数。
不能和static  private 或 final 等使用。
可以没有抽象方法。
代码如下:写了个大概。
import java.io.*;
import java.util.*;
import java.math.*;
abstract class Person
{
private String name;
public void Setname( String name )
{
  this.name = name;
}
public String getname( )
{
  return name;
}
abstract void action();//行为
}
class Doctor extends Person//医生
{
public void action()
{
  System.out.println("手术");
}
}
class Nurse extends Person//护士
{
.....
}
public class Main
{
        public static void main(String[] args)
        {
      
         Doctor a = new Doctor();
         a.Setname("张三");
         a.action();
        }
      
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 晓风妮子 于 2013-4-20 20:43 编辑

抽象类中是有构造方法的
抽象关键字abstract不可以与private,final,static一起使用
抽象类中可以没有抽象方法,甚至可以一个抽象方法都没有,在图形化界面中的事件监听机制中,有一个接口WindowsAdaptor没有一个抽象方法,其子类一实现这个接口,
即自动拥有了父类的方法不用重写所有方法,只需要重写需要修改的方法就可以了,大大简化了代码。
abstract class PersonHospital {
String name;                             //创建医护人员的抽象类,并定义姓名,所属医院和抽象方法
String Hospital;
public abstract void function();
}
class Doctor extends PersonHospital{    //创建医生类写构造函数以便初始化,并复写方法
Doctor(String name,String Hospital){
  this.name=name;
  this.Hospital=Hospital;
}
public void function(){
  System.out.println(Hospital+"的"+name+"医生"+"在为病人看病");
}
}
class Nurse extends PersonHospital{    //创建医生类写构造函数以便初始化,并复写方法

Nurse(String name,String Hospital){
  this.name=name;
  this.Hospital=Hospital;
}
public void function(){
  System.out.println(Hospital+"的"+name+"护士"+"在护理病人");
}
}
public class TestDemo{
public static void main(String[] args){
  Doctor d = new Doctor("张三","人民医院");
  d.function();
  Nurse n = new Nurse("李四","儿童医院");
  n.function();

}
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
晓风妮子 发表于 2013-4-20 20:16
抽象类中是有构造方法的
抽象关键字abstract不可以与private,final,static一起使用
抽象类中可以没有抽象方 ...

请问能举一个简单易理解的例子吗?希望能用代码体现下具体用处。谢谢了{:3_57:}
回复 使用道具 举报
刚金波 发表于 2013-4-20 20:08
回答:
抽象类中是有构造函数的,因为抽象类要被继承,如果子类实现了抽象类的全部方法,那么这个子类就可 ...

谢谢啊{:3_57:}
回复 使用道具 举报
殇_心。 发表于 2013-4-20 20:16
抽象类中有构造函数。
不能和static  private 或 final 等使用。
可以没有抽象方法。

谢谢,学习了。
回复 使用道具 举报
晓风妮子 发表于 2013-4-20 20:16
抽象类中是有构造方法的
抽象关键字abstract不可以与private,final,static一起使用
抽象类中可以没有抽象方 ...

谢谢,学习了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马