暂无权限

加入尚新途,才有权限看这些视频哦!

点击前往
×
问答
李阳婷
1楼
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方法移除,有没有别的改进方式呢?image.png

尚新途

你的这个方法放到构造方法里了

戴墨镜的修勾
2楼


直接输出t和输出t.toString()有什么区别,是否在重载toString()后想要知道对象的内容只需要输出t即可,除了重载之后看到对象内容,t.toString()处的toString()还有没有什么其他用了?

1667141182506.jpg

尚新途

直接输出t和输出t.toString()有什么区别

没有区别,t是引用类型的,只要你输出,就会默认的调用toString方法。

是否在重载toString()后想要知道对象的内容只需要输出t即可,除了重载之后看到对象内容     

这里你应该是要说重写吧重写了toString方法吧

是否在重载toString()后想要知道对象的内容只需要输出t即可,除了重载之后看到对象内容

这里是重写,不是重载,toString方法是Object类下的方法,你现在在自己的类中定义了toString方法,

这个叫重写。打印对象内容是一个方面,可以把一个StringBuffer或者StringBulider转成String类型,后面会讲到,继续往后学习

微信用户
3楼

 老师  to string可以实现字符转成字符串吗

尚新途

可以通过重写tostring方法来实现

风止意难平
4楼

这两个是一样的吗?

10.png

尚新途

对一样的,默认的调用toString方法

尚新途

好的

尚新途

嗯嗯

zkin
5楼

为什么重写equals();方法后t1和t2的toString();方法打印值一样了。改变属性值后又变了。

没重写equals()时

image.png


重写之后image.png

改变属性值后

image.png

尚新途

image.png

但你重新修改了属性值以后,属性值的比较蔚false了,那么equals认为这是两个不同的对象,所以会打印不同的内存地址

温如言
6楼

老师像您请教一个问题,toString()方法打印出来的是什么呢,重写这个方法是用来做什么呢


尚新途

你不重写,自动调用的是父类object的tostring方法。打印一串地址。

重写的话返回的是你定义的字符串。

元鑫
7楼

代码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全部赋值了,效果是一样的。

故事说给狗
8楼

to string        是用来专门重写方法的吗

尚新途

不是哦

ToString方法会返回一个“以文本方式表示”此对象的字符串。

因为所有的类都继承object类,如果你不重写这个方法,会自动调用object的方法。

如果不重写,ToString打印的就是一个地址。

配合
9楼

老师我之前下的IDEA是社区版的,没有diagrams这个选项,需要下旗舰版的吗

尚新途

要的。

肩挑希望奔梦
10楼

你好,老师:在查看类关系时,右键点击类名,找不到Diagrams.该怎么办?

image.png

尚新途

ctrl+alt+shift+u

尚新途

老师,快捷键按了  还是调不出来啊?

尚新途

微信解决吧


王佳颖
11楼
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);
    }
}

代码如上图所示,运行截图以及问题如下,红色部分和黄色部分

图片.png



尚新途

没有使用toString方法打印的是对象的地址,而是用了toString打印的是对象中的各个属性。

12楼
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,提交作业也是一样哦。

image.png

栖春山.
13楼

老师  我按住ctril 然后按左键 看不见object的源码啊

尚新途

解决了

尚新途

微信用户
14楼
public class TestObject {
    public static void main(String[] args) {

    }
}

class Employee extends Object{

}

老师我为什么按Ctrl进不了Object的类源码


尚新途

按住ctrl,鼠标指到Object,会在Object下面出现一条横杠,点击Object即可进入。

zjshaopku
15楼

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


自我检测(5S)