黑马程序员技术交流社区
标题: 抽象类 [打印本页]
作者: 权跃杰 时间: 2012-7-9 17:24
标题: 抽象类
看下下面代码,class TongYong
{
private String name;
private String id;
private double gz;
TongYong(String name,String id,double gz)
{
this.name=name;
this.id=id;
this.gz=gz;
}
public abstract void work();
}
class JingLi extends TongYong
{
private int jiangjin;
JingLi(String name,String id,double gz,int jiangjin)
{
super(name,id,gz);
this.jiangjin=jiangjin;
}
public void work()//覆盖的时候必须与父类的方法是一模一样,要用abstract吗?
{
System.out.println("lingdao");
}
}
class Worker extends TongYong
{
Worker(String name,String id,double gz)
{
super(name,id,gz);
}
public void work()//覆盖的时候必须与父类的方法是一模一样,要用abstract吗?
{
System.out.println("pugong");
}
}
class GongSi
{
public static void main(String[] args)
{
Worker w=new Worker("权跃杰","技术78号",3200);
w.work();//抽象方法能覆盖吗?
}
}
TongYong不是抽象的,并且未覆盖TongYong中的抽象方法work()class TongYong
这样怎么解决?
作者: 李海晓 时间: 2012-7-9 17:30
class TongYong 这个类不是抽象类,就不能有抽象方法
如果类中有抽象方法,那么这个类必须是抽象类,改成class abstract TongYong
抽象方法可以覆盖啊,
作者: 王宝康 时间: 2012-7-9 17:46
抽象类中可以不包含抽象方法,但是包含抽象方法就一定要定义为抽象类,把类用abstract修饰,你的Tongyong类中含有抽象方法public abstract void work();
所以TongYong类需要定义为抽象方法,抽象方法就是用来覆盖的,子类中具体实现父类中的抽象方法,子类如果为非抽象类,则必须实现父类中定义的抽象方法。子类为非抽象类时就不再用abstract修饰。
作者: 李伟 时间: 2012-7-9 17:58
abstract class TongYong//加上abstract,类里面有抽象方法,这个类就必须是抽象类
{
private String name;
private String id;
private double gz;
TongYong(String name,String id,double gz)
{
this.name=name;
this.id=id;
this.gz=gz;
}
public abstract void work();
}
class JingLi extends TongYong
{
private int jiangjin;
JingLi(String name,String id,double gz,int jiangjin)
{
super(name,id,gz);
this.jiangjin=jiangjin;
}
public void work()//覆盖的时候必须与父类的方法是一模一样,要用abstract吗?
//不用,abstract通常用来定义没有方法体的方法。
{
System.out.println("lingdao");
}
}
class Worker extends TongYong
{
Worker(String name,String id,double gz)
{
super(name,id,gz);
}
public void work()//覆盖的时候必须与父类的方法是一模一样,要用abstract吗?
//不用,abstract通常用来定义没有方法体的方法。
{
System.out.println("pugong");
}
}
class GongSi
{
public static void main(String[] args)
{
Worker w=new Worker("权跃杰","技术78号",3200);
w.work();//抽象方法能覆盖吗?//能覆盖啊,大多数抽象方法都是用来覆盖的 }
}
作者: 徐帅 时间: 2012-7-9 18:29
你的问题可以在以下的第 1> ,3> 中找到答案,另外赠送几点,呵呵。
1. 抽象类的特点:
1> 抽象方法一定在抽象类中。
2> 抽象方法和抽象类都必须被abstract关键字修饰。
3> 抽象类不可以用new创建对象。因为调用抽象方法没意义。
4> 抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,(若只是覆 盖部分,子类继承后仍有抽象方法,就变成了抽象类)
建立子类对象用。如果子类只 覆盖了部分抽象方法,那么该子类还是一个抽象类。
5>抽象类具有强制性,强迫子类必须复写
作者: 黑马振鹏 时间: 2012-7-9 18:41
class TongYong中定义了public abstract void work(); 抽象方法,所以类必须定义为抽象类。子类继承了抽象类,如果要用子类创建实例对象,必须实现抽象方法。
作者: 权跃杰 时间: 2012-7-9 21:37
ok,是抽象类中可以有不抽象的方法,普通类中不可以有抽象方法,抽象方法必须存在于抽象类中
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |