黑马程序员技术交流社区
标题:
关于抽象类的小困惑
[打印本页]
作者:
cyh8807
时间:
2013-3-10 15:56
标题:
关于抽象类的小困惑
class Employee
{
private String name;
private String id;
private double pay;
Employee(String name,String id,double pay)
{
this.name = name;
this.id = id;
this.pay = pay;
}
public abstract void work();
}
class Manager extends Employee
{
private double bonus;
Manage(String name,String id,double pay,double bonus)
{
super(name,id,pay);
this.boune = bonus;
}
public void work()
{
System.out.println("manager work");
}
}
复制代码
上述代码中 public abstract void work();为抽象方法,但是抽象方法必须定义在抽象类中,但是这个类
却没有定义为抽象类。那么为什么可以在不是抽象的类中定义抽象方法呢?
在上面的这种情况下是否可以new Employee()创建具体的实例对象呢?
作者:
wodeairenw
时间:
2013-3-10 16:07
本帖最后由 wodeairenw 于 2013-3-10 16:26 编辑
你这代码编译都通不过~!~!你验证过没?再把子类都注释掉再编译就会提示你类没定义抽象。
抽象类特点:
1:抽象方法一定在抽象类中。
2:抽象方法和抽象类都必须被abstract关键字修饰
3:抽象类不可以用new创建对象,因为调用抽象方法没意义。
4:抽象类中的抽象方法要被使用,必须由子类覆写起所有抽象方法后,建立子类对象调用,
如果子类只覆盖部分抽象方法,那么该子类还是一个抽象类。
帮你找出几个错误,写代码要仔细啊。
abstract class Employee//需要定义抽象,估计你代码没编译就提问题了
{
private String name;
private String id;
private double pay;
Employee(String name,String id,double pay)
{
this.name = name;
this.id = id;
this.pay = pay;
}
public abstract void work();
}
class Manager extends Employee
{
private double bonus;
Manager(String name,String id,double pay,double bonus)//掉了个r字母
{
super(name,id,pay);
this.bonus = bonus;//这写错了
}
public void work()
{
System.out.println("manager work");
}
}
作者:
张宁
时间:
2013-3-10 16:18
朋友,这个代码是错误的,类前边肯定要加abstract。如果有抽象方法,那么这个类肯定不可以new,你new一个带有抽象方法的类。那么这个抽象方法又不能调用,这是说不过去的。所以只要类里边含有抽象方法,那么这个类就一定是抽象的。这个程序你运行了吗?肯定运行不通过。抽象方法一定在抽象类中,这是抽象类象类的特点。
作者:
沈文杰
时间:
2013-3-10 16:29
本帖最后由 沈文杰 于 2013-3-10 16:35 编辑
abstract class Employee
{
private String name;
private String id;
private double pay;
Employee(String name,String id,double pay)
{
this.name = name;
this.id = id;
this.pay = pay;
}
public abstract void work();
}
class Manager extends Employee
{
private double bonus;
Manager(String name,String id,double pay,double bonus)
{
super(name,id,pay);
this.bonus = bonus;
}
public void work()
{
System.out.println("manager work");
}
}
public class AbstractClass {
public static void main(String[] args){
Manager ma = new Manager("zhangsan","kasdf",12233,10000.1);
ma.work();
}
}
复制代码
哥们你代码错误好多啊,不是用MyEclipse编译的吧。。真心不懂你怎么过的啊
作者:
沈文杰
时间:
2013-3-10 16:34
本帖最后由 沈文杰 于 2013-3-10 16:36 编辑
[color=Red]abstract[/color] class Employee
{
private String name;
private String id;
private double pay;
Employee(String name,String id,double pay)
{
this.name = name;
this.id = id;
this.pay = pay;
}
public abstract void work();
}
class Manager extends Employee
{
private double bonus;
Manage[color=Red]r[/color](String name,String id,double pay,double bonus)
{
super(name,id,pay);
this.[color=Red]bonus[/color] = bonus;
}
public void work()
{
System.out.println("manager work");
}
}
复制代码
含有抽象方法的类不需是抽象类!抽象类不能够被实例化!错误帮你标出来了
作者:
cyh8807
时间:
2013-3-10 17:17
话说我这段代码没有编译过,我的焦点在Employee这个类上面,因为老毕视频中这段代码在这个类中只定义了一个抽象方法,并没有将类定义为抽象的
我的疑问就因此而出,顺手敲出来问下这个问题,至于中间的那些字母错误,恕我粗心
作者:
wodeairenw
时间:
2013-3-10 20:51
赵彦辉 发表于 2013-3-10 17:17
话说我这段代码没有编译过,我的焦点在Employee这个类上面,因为老毕视频中这段代码在这个类中只定义了一个 ...
这个地方我也注意过,毕老师是直接写的代码没编译,估计就没发现这个问题。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2