这个两个代码,为什么一个需要用set get方法来访问,一个不需要??不是说用private关键字设置的变量不能直接访问吗?为什么第一个代码可以给变量赋值,第二个代码不行??
class Person
{
private String name;
private int age;
Person(){
System.out.println("this is a void Person()");
}
Person(String name,int age){
this.name = name;
this.age = age;
}
public String info(){
return "the man is name:"+name+" age:"+age;
}
}class Teacher extends Person
{
private String title;
Teacher(){
System.out.println("teacher()");
}
Teacher(String name,int age,String title){
super(name,age);
this.title = title;
}
public String info(){
return super.info()+" title:"+title;
}
public String toString(){
return "i`am a teacher wang!";
}
}
public class Testequals
{
public static void main(String arg[]){
Teacher teach1 = new Teacher("wang",45,"high");
Teacher teach2 = new Teacher("wang",45,"high");
System.out.println(teach1.info());
System.out.println(teach1.toString());
System.out.println(teach1.equals(teach2));
}}
class Student {
private String name;
private String sex;
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
}
}
public class TestStudent{
public static void main(String[] args){
Student student=new Student();
student.setName("zhangsan");
student.setSex("male");
class Person
{
private String name;
private int age;
Person(){
System.out.println("this is a void Person()");
}
Person(String name,int age){
this.name = name;
this.age = age;
}
public String info(){
return "the man is name:"+name+" age:"+age;
}
}class Teacher extends Person
{
private String title;
Teacher(){
System.out.println("teacher()");
}
Teacher(String name,int age,String title){
super(name,age);
this.title = title;
}
public String info(){
return super.info()+" title:"+title;
}
public String toString(){
return "i`am a teacher wang!";
}
}
public class Testequals
{
public static void main(String arg[]){
Teacher teach1 = new Teacher("wang",45,"high");
Teacher teach2 = new Teacher("wang",45,"high");
System.out.println(teach1.info());
System.out.println(teach1.toString());
System.out.println(teach1.equals(teach2));
}}
class Student {
private String name;
private String sex;
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
}
}
public class TestStudent{
public static void main(String[] args){
Student student=new Student();
student.setName("zhangsan");
student.setSex("male");
private String name;
private String sex; public Student(){ }
public Student(String name ,String sex){
this.name=name; //在同一个类 ,等同this.setName(name);
this.sex = sex; //在同一个类 ,this.setSex(sex);
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
}
}
public class TestStudent{
public static void main(String[] args){
Student student=new Student();
// student.name="abc" 这一行会编译出错
// 在Student类体之外,要想给name属性赋值
//必须要用public的setter方法,因为name属性声明为private类型
//这就是setter的意义 student.setName("zhangsan");
student.setSex("male");
}
}
第二个程序没有构造方法 默认的为public student(){},所以你创建一个对象之后其实它是没有信息的 只能通过内部方法向其中赋值
我也是新手 表达的不好见谅 其实就是这个原因啦 建议你看看清华大学出版社的《java语言程序设计》的继承那一段
如果说是访问控制的话,一般都是建议把成员变量设成私有,然后用set、get的方法来访问,这样比较安全
主要是给类属性赋值、取值,你可以使用任意能达到目的的方式,不一定get、set。
可以参考下面的代码public class Person
{
private String name;
private char sex;
private int age; public Person()
{
}
public Person(String name, char sex, int age)
{
this.name = name;
this.sex = sex;
this.age = age;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
public void setSex(char sex)
{
this.sex = sex;
}
public char getSex()
{
return this.sex;
}
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return this.age;
}
public void print()
{
System.out.println("name: " + name + "\n" + "sex: " + sex + "\n" + "age: " + age);
}
}
public class PersonTest1
{
public static void main(String[] args)
{
//不可以直接修改Person的成员变量
/*
Person p = Person();
p.name = "zhangsan";
p.sex = 'm';
p.age = 16;
p.print();
*/
Person p = new Person("zhangsan", 'm', 18);
p.print();
//不可以直接访问Person的成员变量
/*
System.out.println(p.age);
*/
System.out.println("------------------");
p.setName("lisi");
p.setSex('w');
p.setAge(16);
p.print(); System.out.println("-------------------");
//如果没有get的方法,输出Person中的数据只有在Person中定义一个
//函数负责输出
System.out.println(p.getName());
System.out.println(p.getSex());
System.out.println(p.getAge());
}
}
get,set方法是public的一般,
public void setName(String name){
this.name = name; // 看上去和public String name没区别
// 但是
在这里,你可以写很多代码
// fk
fk
fk
上面也一样,本质上就是归你控制了
如果,public String name的话,你没就法了.
}