public class TestExtends { public static void main(String[] args){ Student s = new Student("yang",178,"Java"); s.person.rest(); s.study(); } } class Person{ String name; int height; public void rest(){ System.out.println("休息一会!"); } } class Student { Person person = new Person(); String major; public Student(String name,int heigh,String major) { this.person.name = name; this.person.height = height; this.person.rest(); this.major = major; public void study(){ System.out.println("学习:"); person.rest(); System.out.println(this.person2.name); } } }
老师,请问这是什么问题呢?我将s.study改成s.Student.study之后也不行;调试的提示是将study方法移除,有没有别的改进方式呢?
你的这个方法放到构造方法里了
直接输出t和输出t.toString()有什么区别,是否在重载toString()后想要知道对象的内容只需要输出t即可,除了重载之后看到对象内容,t.toString()处的toString()还有没有什么其他用了?
直接输出t和输出t.toString()有什么区别
没有区别,t是引用类型的,只要你输出,就会默认的调用toString方法。
是否在重载toString()后想要知道对象的内容只需要输出t即可,除了重载之后看到对象内容
这里你应该是要说重写吧重写了toString方法吧
是否在重载toString()后想要知道对象的内容只需要输出t即可,除了重载之后看到对象内容
这里是重写,不是重载,toString方法是Object类下的方法,你现在在自己的类中定义了toString方法,
这个叫重写。打印对象内容是一个方面,可以把一个StringBuffer或者StringBulider转成String类型,后面会讲到,继续往后学习
老师 to string可以实现字符转成字符串吗
可以通过重写tostring方法来实现
这两个是一样的吗?
对一样的,默认的调用toString方法
好的
嗯嗯
为什么重写equals();方法后t1和t2的toString();方法打印值一样了。改变属性值后又变了。
没重写equals()时
重写之后
改变属性值后
但你重新修改了属性值以后,属性值的比较蔚false了,那么equals认为这是两个不同的对象,所以会打印不同的内存地址
老师像您请教一个问题,toString()方法打印出来的是什么呢,重写这个方法是用来做什么呢
你不重写,自动调用的是父类object的tostring方法。打印一串地址。
重写的话返回的是你定义的字符串。
代码1:
class Teacher{ int teacherId; Person1 person1=new Person1(); public Teacher(int teacherId, Person1 person1) { this.teacherId = teacherId; this.person1 = person1; } }
代码2:
class Teacher { int teacherId; Person1 person1 = new Person1(); Teacher(int teacherId,String name,int height){ this.teacherId = teacherId; this.person1.name = name; this.person1.height = height; } }
其中Person1有两个属性:name、height
那么在构造器Teacher中两个代码的效果是不是一样的。
在第一个代码中,如果你给person1的name,age全部赋值了,效果是一样的。
to string 是用来专门重写方法的吗
不是哦
ToString方法会返回一个“以文本方式表示”此对象的字符串。
因为所有的类都继承object类,如果你不重写这个方法,会自动调用object的方法。
如果不重写,ToString打印的就是一个地址。
老师我之前下的IDEA是社区版的,没有diagrams这个选项,需要下旗舰版的吗
要的。
你好,老师:在查看类关系时,右键点击类名,找不到Diagrams.该怎么办?
ctrl+alt+shift+u
老师,快捷键按了 还是调不出来啊?
微信解决吧
class Person{ String name; int age; public String toString(){ return name+",年龄:"+age; } } public class Text { public static void main(String[] args){ Person p=new Person(); p.age=20; p.name="李东"; System.out.println("info"+p); Text t=new Text(); System.out.println(t); } }
代码如上图所示,运行截图以及问题如下,红色部分和黄色部分
没有使用toString方法打印的是对象的地址,而是用了toString打印的是对象中的各个属性。
com.bjsxtUser { String String (idString nameString pwf) { .= id.= name.= } String (){ + + + + } (String[] args) { User u1 = User()User u2 = User()System..println(u1)System..println(u2)} }
pwd输出显示为空为什么
找到错误了
下次提问题是代码放到代码区,选择java,提交作业也是一样哦。
老师 我按住ctril 然后按左键 看不见object的源码啊
解决了
public class TestObject { public static void main(String[] args) { } } class Employee extends Object{ } 老师我为什么按Ctrl进不了Object的类源码
按住ctrl,鼠标指到Object,会在Object下面出现一条横杠,点击Object即可进入。
老师好,我自己在练习toString的时候写如下代码;
test { Person{ String } (String[] args) { Person p = Person()p.=p.=System..println(p)} }
在写第八行new Person();时候
idea体型必须吧Person类定义为静态,即第二行变成 static class Person{}才能运行。
因为之前讲到,静态是可以调用对象的,但反过来不可以,所以这里我不是很懂,psvm是静态方法,所以它去调用Person类(一个对象)应该没有问题,这里为什么会有问题呢?
而书中164页例5-5的结构:
class Person{ } public class Test{ psvm{ Person p = new Person(); } }
这里的Person又不需要定义static呢?谢谢
这里main方法比较特殊,它是jvm运行程序的入口,与普通的静态方法用法稍有区别
那老师可以稍微解释一下,为什么第二行代码定义Person类,必须加static
public class test { static class Person{ String name; int age; } public static void main(String[] args) { Person p = new Person(); p.age=12; p.name="test"; System.out.println(p); } }
而下面的代码定义Person类却不用静态,这里实在是搞不懂,谢谢
class Person{ } public class Test{ psvm{ Person p = new Person(); } }
那老师可以稍微解释一下,为什么第二行代码定义Person类,必须加static
public class test { static class Person{ String name; int age; } public static void main(String[] args) { Person p = new Person(); p.age=12; p.name="test"; System.out.println(p); } }
而下面的代码定义Person类却不用静态,这里实在是搞不懂,谢谢
class Person{ } public class Test{ psvm{ Person p = new Person(); } }
方便在没有创建Person这样的对象情况下来进行调用(方法/变量)
被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。