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关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。