黑马程序员技术交流社区

标题: 新手一枚 。为入学考试努力中 [打印本页]

作者: cai937346660    时间: 2015-5-13 08:17
标题: 新手一枚 。为入学考试努力中
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 Manage extends Employee
{
        private int bouns;
        Manage(String name,String id,double pay,int bouns)
        {
                super(name,id,pay);
                this.bouns=bouns;
        }
        public void work()
        {
                System.out.println("gaoji");
        }
}
class Pro extends Employee
{
        Pro(String name,String id,double pay)
        {
                super(name,id,pay);
        }
        public void work()
        {
                System.out.println("diji");
        }
}
class AbstractDemo1
{
        public static void main(String[] args)
        {
         
               
        }
}
如过我想输出Manage的 工作属性    怎么在主函数中写输出语句啊, 我new了个新对象也不行 往里面赋值也不行 ,是代码错了么? 求大神帮我解答下  ,谢谢了
作者: 突然世界晴    时间: 2015-5-13 08:40
Employee el=new Manage ("经理","110","0.5",500000)
作者: cai937346660    时间: 2015-5-13 09:00
突然世界晴 发表于 2015-5-13 08:40
Employee el=new Manage ("经理","110","0.5",500000)

不对,会出现这种提示  我昨天也是一直出这样的提示,C:\Users\Administrator\Desktop\1.png
作者: cai937346660    时间: 2015-5-13 09:01
突然世界晴 发表于 2015-5-13 08:40
Employee el=new Manage ("经理","110","0.5",500000)

F:\Editplus\practice>javac AbstractDemo1.java
AbstractDemo1.java:44: 找不到符号
符号: 构造函数 Manage(java.lang.String,java.lang.String,java.lang.String,int)
位置: 类 Manage
                Employee el=new Manage ("经理","110","0.5",500000);
                            ^
1 错误
作者: 13699266500    时间: 2015-5-13 09:29
没发现有哪个地方不对
作者: 快乐Anne    时间: 2015-5-13 10:32
没有错啊
作者: cai937346660    时间: 2015-5-13 10:52
13699266500 发表于 2015-5-13 09:29
没发现有哪个地方不对

是啊 ,我跟着视频敲的,但是视频中没给输出,我心思自己输出看看 ,但就是出错,我实在是不知道是错在哪里了
作者: 13699266500    时间: 2015-5-13 11:07
你把你主函数里的代码补齐,我看下
作者: 浅浅诗行    时间: 2015-5-13 11:36
  1. package test;

  2. public abstract class Employee {

  3.         private String name;
  4.         private String id;
  5.         private double pay;

  6.         Employee(String name, String id, double pay) {
  7.                 this.name = name;
  8.                 this.id = id;
  9.                 this.pay = pay;
  10.         }
  11.        
  12.        
  13.         public String getName() {
  14.                 return name;
  15.         }


  16.         public String getId() {
  17.                 return id;
  18.         }


  19.         public double getPay() {
  20.                 return pay;
  21.         }


  22.         public abstract void work();

  23. }
  24. package test;

  25. public class Manage extends Employee {
  26.         private int bouns;

  27.         Manage(String name, String id, double pay, int bouns) {
  28.                 super(name, id, pay);
  29.                 this.bouns = bouns;
  30.         }

  31.         public void work() {
  32.                 System.out.println("gaoji");
  33.         }

  34.         public int getBouns() {
  35.                 return bouns;
  36.         }
  37.        
  38. }
  39. package test;

  40. public class test2 {

  41.         /**
  42.          * @param args
  43.          */
  44.         public static void main(String[] args) {
  45.                 // TODO Auto-generated method stub
  46.                 Manage m  = new Manage("zhangsan", "1", 100, 10);
  47.                 System.out.println(m.getName());
  48.                 System.out.println(m.getId());
  49.                 System.out.println(m.getPay());
  50.                 System.out.println(m.getBouns());
  51.         }

  52. }
复制代码

作者: hzhzhen    时间: 2015-5-13 11:37
本帖最后由 hzhzhen 于 2015-5-13 11:53 编辑

private只能在本类调用,方法我觉得有两种,1、把private属性修改为public,
2、或者在Manage里面创建获取工作属性方法,再在主函数调用。
    楼上用的就是在类里面创建获取的方法,值得参考。

作者: cai937346660    时间: 2015-5-13 11:56
13699266500 发表于 2015-5-13 11:07
你把你主函数里的代码补齐,我看下

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 Manage extends Employee
{
        private int bouns;
        Manage(String name,String id,double pay,int bouns)
        {
                super(name,id,pay);
                this.bouns=bouns;
        }
        public void work()
        {
                System.out.println("gaoji");
        }
}
class Pro extends Employee
{
        Pro(String name,String id,double pay)
        {
                super(name,id,pay);
        }
        public void work()
        {
                System.out.println("diji");
        }
}
class AbstractDemo1
{
        public static void main(String[] args)
        {
         
                Manage m=new Manage ("经理","110","0.5",500000);
                m.work();
               
        }
}
运行结果是:

F:\Editplus\practice>javac AbstractDemo1.java
AbstractDemo1.java:44: 找不到符号
符号: 构造函数 Manage(java.lang.String,java.lang.String,java.lang.String,int)
位置: 类 Manage
                Manage m=new Manage ("经理","110","0.5",500000);
                         ^
1 错误

作者: cai937346660    时间: 2015-5-13 11:57
浅浅诗行 发表于 2015-5-13 11:36

你的意思是我这个没有获取和建立的方法所以才输出不了是吧
作者: 浅浅诗行    时间: 2015-5-13 12:02
cai937346660 发表于 2015-5-13 11:57
你的意思是我这个没有获取和建立的方法所以才输出不了是吧

对呀,你没有get方法,所以获取不到,但是你不用建立方法,因为在构造函数中已经传值进去了。
作者: 浅浅诗行    时间: 2015-5-13 12:03
浅浅诗行 发表于 2015-5-13 12:02
对呀,你没有get方法,所以获取不到,但是你不用建立方法,因为在构造函数中已经传值进去了。 ...

你这个创建对象的语句也错了,Manage m=new Manage ("经理","110","0.5",500000);0.5是double类型,不需要加引号。
作者: cai937346660    时间: 2015-5-13 12:18
浅浅诗行 发表于 2015-5-13 12:03
你这个创建对象的语句也错了,Manage m=new Manage ("经理","110","0.5",500000);0.5是double类型,不需 ...

是呢 ,   通过编译了  太感谢了   
作者: cai937346660    时间: 2015-5-13 12:21
浅浅诗行 发表于 2015-5-13 12:02
对呀,你没有get方法,所以获取不到,但是你不用建立方法,因为在构造函数中已经传值进去了。 ...

可是我昨天 就没有往构造函数中传值  只是写了 Manage m = new Manage();   m.show();  就是通不过   今天就通过了-  - 真是怪了
作者: QQheima    时间: 2015-5-13 13:24
该说的都被你们说了,我就看看~
作者: 我心依旧0329    时间: 2015-5-13 13:29
编译错误啊
作者: jiangwenjun    时间: 2015-5-13 13:37
我这样问 只有用反射的方法才可以,拿到Manage的属性.   不过我知道你说什么意思!你没有搞懂什么是封装。封装的概念就是把不需要给对外提供的属性都隐藏起来,再对外提供访问方法。  你应该在Manage类中加一个方法   getBouns(){ this.bouns=bouns}
作者: 13699266500    时间: 2015-5-13 14:10
你写的代码没问题,你主函数里new的对象有问题
Manage(String name,String id,double pay,int bouns)
  Manage m=new Manage ("经理","110","0.5",500000);
你既然声明的是double类型的,你new对象的时候,new成了字符串类型的pay




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2