黑马程序员技术交流社区
标题:
关于private私有的一个小问题
[打印本页]
作者:
精彩生活向钱看
时间:
2013-6-1 07:37
标题:
关于private私有的一个小问题
本帖最后由 精彩生活向钱看 于 2013-6-1 12:28 编辑
class Person
{
private String name;
private int age;
Person(String name)
{
this.name=name;
}
public void speak()
{
System.out.println(name+":"+age)
}
}
class Demo
{
public static void main (String[]args)
{
person p=new person("旺财");
p.speak();
}
}
复制代码
问题是这样的,private不是私有吗,它私有的东西能在该类中有效,name和age被私有了,为什么在下边输入”旺财“是可以的,为什么?请各位高手解答!
作者:
小石头39910
时间:
2013-6-1 07:59
虽然name 和age被你私有化了,可是你建了一个带参数的构造函数,它可以向外提供访问方式,所以你建立Person实例的时候首先访问Person的构造函数,就把旺财穿进去了
作者:
yooc
时间:
2013-6-1 08:05
class Person
{
private String name;
private int age;
Person(String name) //构造函数
{
this.name=name; //此方法将外部数据写入内部私有变量name
}
public void speak()
{
System.out.println(name+":"+age)
}
}
class Demo
{
public static void main (String[]args)
{
person p=new person("旺财"); //调用构造函数 将旺财作为参数传递,而非直接访问其私有变量name
p.speak();
}
}
}
复制代码
已帮你添加注释,便于理解
作者:
孔雀东南飞
时间:
2013-6-1 08:22
在创建类的实例时,会访问类的构造函数。分两种情况:
1、在类中没有人为定义构造函数,即系统默认的构造函数,以上例就是:Person p = new Person();此时访问的是默认构造函数Person(){},
2、在类中人为定义了构造函数,即带参数的构造函数,就如楼主定义的那样:
Person(String name)
{
this.name = name;
}
楼主在Person p = new
Person("旺财");
时,系统访问构造函数Person(String name){this.name = name;},此时参数旺财已经赋值给私有的name了。而在p.speak();时输出的name已经是"旺财"了。
另外楼主需要注意的是:
1、注意区分大小写,类名与构造函数名必须一致,而楼主
person p =new person("旺财");
2、在类Demo中,并没有直接访问类Person的私有name和age,而是访问的类Person中的非私有方法,只不过该方法可以访问私有name和age,这是可以的。
但是如果在Demo中直接使用p.name或p.age,这是不允许的 ,这叫做直接在类外访问private成员。
3、对于类中private变量的访问,通常是通过方法来实现的。
作者:
王林涛
时间:
2013-6-1 08:25
1,这里是你写的
朋友随便说一句,以后自己写代码加上注释,虽然是简单最好也加
//建立Person类
class Person
{
//私有化成员变量name
private String name;
//私有化成员变量age
private int age;
//建立构造函数(构造函数是给对象初始化用的)
Person(String name)
{
//this代表本类对象的引用
this.name=name;
}
//建立speak()方法
public void speak()
{
System.out.println(name+":"+age)
}
}
//建立Demo类
class Demo
{
public static void main (String[]args)
{
//建立对象
person p=new person("旺财");
//调用speak()方法
p.speak();
}
}
你是把对象建立在本类方法中,本类对象调用本类方法当天可以访问了!
作者:
王浩骅
时间:
2013-6-1 09:08
你只是对成员变量进行了私有化,但类中的构造函数并没有私有化,在其他类中仍可以调用类中的构造函数进行实例化对象。所以Person p=new Person("旺财");可是当你想单独赋值给成员变量时如。p.name = "wanghaohua";将会编译出错。如果想要连对象建立都不能做的话,你就要私有化相应的构造函数就是
private Person(String name)
{
this.name=name;
}
作者:
山鹰
时间:
2013-6-1 09:08
Person p = new Person("旺财")
age 和name可以通过set方法进行设置,get方法获得
这句调用的是有参构造
Person(String name)
{
this.name=name;
}
作者:
花开花落总相似
时间:
2013-6-1 09:29
此问题不解释 看视频去
作者:
骑上最爱
时间:
2013-6-1 10:31
他是通过构造方法中的name传递到私有的name上的,所以能访问到。如果直接访问是要报错的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2