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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

抽象类必须存放在抽象类中?那么毕老师Java基础视频教程第07天-10-面向对象(抽象类练习)中员工工作方法是抽象的,为什么类没有定义抽象的?还有重写是子父类方法要一模一样,那如果子类的方法也是abstarct抽象的,那该怎么调用这个方法?抽象类不可以用new创建对象。子类建立对象怎么调用呢?下面代码中有几个疑惑点。。。高手帮忙理清下思绪...怎么感觉代码与概念是矛盾的??
class YuanGong{
        private String name;
        private String id;
        private double pay;
        YuanGong(String name,String id,double pay)
        {
                this.name = name;
                this.id = id;
                this.pay = pay;
        }
        public abstract void work();       


}
class PuTong extends YuanGong
{
        PuTong(String name,String id,double pay)
        {
                super(name,id,pay);
        }
        public void work()        {
                System.out.println("普通员工工作");
        }
}
class JingLin extends YuanGong
{
        private double jiangjin;
        JingLin(String name,String id,double pay,double jiangjin)
        {
                super(name,id,pay);
                this.jiangjin = jiangjin;
        }

        public void work()        {
                System.out.println("经理工作");
        }
}

class  AbstractDemo
{
        public static void main(String[] args)
        {
               
        }
}
怎么创建对象调用??

12 个回复

倒序浏览
{:soso_e101:}  同样求解。
回复 使用道具 举报
你没看到 毕老师没编译么! 老师笔误了所以没写, 创建子类对象啊,子类继承了父类,抽象方法 在子类中复习,普通方法直接用就可以!以为继承了父类了

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 魏昂 于 2012-3-21 12:54 编辑

其实 、抽象类体现就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行拓展、改造,但子类总体上会大致保留抽象类的行为方式,我给你打个比方: 假如 咱们有一个类O,它的的功能是从北京到南京 那么我们就可以将这个类定义为抽象类 ,下面在定义一些子类继承他 比如有A、B、C三个类 A是乘坐飞机去的,B是乘坐汽车去的,C是步行去的。那么这三个子类都实现了O 的功能,都实现了从北京到南京的功能,而O则不用去管是哪个子类使用哪种方式完成的、他只管目的是否达到,这样也有利于代码的拓展和维护性 如果以后出现了其它的方式 直接继承O然后实现就可以了。如果父类是抽象类子类必须实现父类中所有的抽象方法,子类是通过创建与父类抽象方法相同的方法来实现父类的,如果子类也是一个抽象类 那么子类当然不能实现父类的方法了 只能通过子类的子类去帮他完成。有点多 不知道你懂了没?
回复 使用道具 举报
魏昂 发表于 2012-3-21 12:52
其实 、抽象类体现就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行拓展 ...

楼上很经典呀。比喻很经典。
回复 使用道具 举报
1如果方法抽象这个类必须定义为抽象类的 。如果不这么做编译必定不通过。
2毕老师视频里讲的特别清楚可以通过写匿名类方式方式调用那个抽象方法,前提是抽象方法的那个类抽象方法不多于2个
3抽象类虽然不能new对象 都是缺可以创建他的引用 执行可以new的类 当然这个抽象类必须是他顶层的类
比如Object obj=new EveryNOabstractClass();
回复 使用道具 举报
那个YuanGong类前应该加abstract,因为类中包含抽象方法;
抽象类不能用于创建实例,只能被当作父类被子类继承。虽然抽象类不能创建实例,但是可以创建抽象类的引用变量,将子类的对象赋给父类的引用变量,利用抽象类和抽象方法可以更好的发挥多态的优势。
public class  AbstractDemo
{
         public static void main(String[] args)
        {
                 YuanGong yg1 = new PuTong("zhangsan","18",2000);
                 YuanGong yg2 = new JingLin("lisi","20",4000,1000);
                 System.out.println(yg1.getClass());
                 yg1.work();
                 System.out.println(yg2.getClass());
                 yg2.work();
                 
        }
}
回复 使用道具 举报
常万 中级黑马 2012-3-21 16:50:07
8#
你们好牛X{:soso_e102:}谢谢了
回复 使用道具 举报
常万 中级黑马 2012-3-21 16:50:33
9#
你们好牛X{:soso_e102:}谢谢了
回复 使用道具 举报
abstract class YuanGong{
        private String name;
        private String id;
        private double pay;
        YuanGong(String name,String id,double pay)
        {
                this.name = name;
                this.id = id;
                this.pay = pay;
        }
        public abstract void work();        


}
class PuTong extends YuanGong
{
        PuTong(String name,String id,double pay)
        {
                super(name,id,pay);
        }
        public void work()        {
                System.out.println("普通员工工作");
        }
}
class JingLin extends YuanGong
{
        private double jiangjin;
        JingLin(String name,String id,double pay,double jiangjin)
        {
                super(name,id,pay);
                this.jiangjin = jiangjin;
        }

        public void work()        {
                System.out.println("经理工作");
        }
}

class  AbstractDemo
{
        public static void main(String[] args)
        {
               
        }
}
忘写了吧 老师也是人 也会犯错误
回复 使用道具 举报
张锦萍 发表于 2012-3-21 14:37
那个YuanGong类前应该加abstract,因为类中包含抽象方法;
抽象类不能用于创建实例,只能被当作父类被子类 ...

高手帮我解释下你这个意义System.out.printlin(yg1.getClass());
回复 使用道具 举报
常万 发表于 2012-3-21 19:17
高手帮我解释下你这个意义System.out.printlin(yg1.getClass());

他这个意思应该就是调用员工的工作方法吧~~
回复 使用道具 举报
你把代码运行一下就看到,
yg1.getClass();得到的是PuTong,
yg2.getClass();得到的是JingLi,
这样对于YuGong的变量就呈现出多态了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马