黑马程序员技术交流社区

标题: 面向对象里面的问题 [打印本页]

作者: 闪亮未来    时间: 2013-11-1 23:33
标题: 面向对象里面的问题
本帖最后由 闪亮未来 于 2013-11-1 23:34 编辑

由于是零基础自学,还是比较吃力的,学的好慢,好多不是不会,是记不住。
class  PersonDemo
{
        public static void main(String[] args)
        {
                Person p = new Person("zhangsan",20);
                p.setName("lisi");
                p.speak();
                new Person();
        }
}

编译后出现这样的提示
D:\six>javac PersonDemo.java
PersonDemo.java:43: 错误: 找不到符号
                new Person();
                ^
  符号:   构造器 Person()
  位置: 类 Person
1 个错误

我基本是按照老师的代码打出来的,后面那个
new Person();的含义还不太懂,谁帮我分析下,以及错误在哪
前面还有person类的代码我就没打出来了



作者: Jim-剣◆﹏    时间: 2013-11-1 23:51
我猜测后面那个new Person()是你自己给加上的,给Person类加上一个无参的构造方法应该就能编译通过了
如果是照抄,可能抄少了一个Person类中的无参构造
作者: joechen    时间: 2013-11-1 23:57
Person类中本来就有空参数构造函数Person(){}    Person(String name,int age){}  构造函数Person()
重载了,这时候既可以new Person();也可以new Person(String name,int age);
作者: 张鹏_2013    时间: 2013-11-2 00:21
对象一建立就会调用与之对应的构造函数,你第二个new person()调用了空参数的构造函数,你的类中没有定义空参数的构造函数,如果没有定义空参数的构造函数系统会给你添加一个,但是如果自定义了构造函数,那么系统就不会添加了。
作者: YUStone    时间: 2013-11-2 01:01
1.一个类至少有一个构造方法,没有声明时,编译时会自动生成一个无参构造方法;
2.一旦声明了一个构造方法,编译就不会再生成默认构造方法;
3.你的问题是Person类里少声明了个无参构造函数。
一下为测试代码:
class Person{
        String name;
        int        age;
       
        public Person(){}
       
        public Person(String name,int age){
                this.setName(name);
                this.setAge(age);
        }
       
        public String getName(){
                return name;
        }
       
        public void setName(String n){
                name=n;
        }
       
        public int getAge(){
                return age;
        }
       
        public void setAge(int a){
                age=a;
        }
       
        public void speak(){
                System.out.println("我的姓名是:"+this.getName()+"我的年龄是"+this.getAge()+"岁");
        }
}

/*
public class  PersonDemo
{
        public static void main(String[] args)
        {
                Person p = new Person("zhangsan",20);
                p.setName("lisi");
                p.speak();
                new Person();
        }
}
*/

public class PersonDemo{
        public static void main(String[] args){
                Person p=new Person("zhangyu",25);
                p.setName("renpan");
                p.speak();
                //Person p1=new Person();
                new Person();
        }
}
               
作者: 闪亮未来    时间: 2013-11-2 08:35
YUStone 发表于 2013-11-2 01:01
1.一个类至少有一个构造方法,没有声明时,编译时会自动生成一个无参构造方法;
2.一旦声明了一个构造方法 ...

多谢,找到问题了,原来类中的那个构造函数被我加了private给私有化了




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