暂无权限

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

点击前往
×
问答
小老王
1楼

“将父类的对象作为子类的属性” 这个说法有点令人困惑,组合关系里不存在继承,所以没有父类和子类的说法, “将A类的对象作为B类的属性,从然B对象能够使用A类的方法或属性”, 这样是不是更准确一点? 

刘成
2楼
Test2{
    (String[ ] args) {
        Student s = Student()s..rest()s.study()}
}


Person {
    String (){
        System..println()}
}


Student {
    Person = Person()String (String nameheightString major) {
        ..= name..= height..rest().= major}
    (){
        System..println().rest()System..println(..)}
}

这个运行不了,是哪里有问题吗

尚新途

同学,这里代码可以放到代码区么,我这里实现的代码乱码了

微信用户
3楼

这个组合一般什么时候会用到啊?

尚新途

数据封装的时候会大量使用。

sand
4楼

类名.类方法

对象名.类方法都可以用来调用方法吗

尚新途

被static修饰的方法是类方法,类方法可以直接通过类名去调用,也可以通过new的对象去调用

普通方法只能通过new的对象去调用

墨水使人清白
5楼
public class testcuhe {
    public static void main(String[] args){
        IStudent s = new IStudent("zhb",180,"java");
        s.person.rest();
        s.study();
    }
}
class IPerson{
    String sname;
    int sheight;
    public void rest(){
        System.out.println("休息一会!");
    }
}
class IStudent{
    IPerson person = new IPerson();
    String major;
    public void study(){
        System.out.println("学习");
        person.rest();
        System.out.println(this.person.sname);

    }
    public IStudent(String sname,int sheight,String major){
        this.person.sname= sname;
        this.person.sheight= sheight;
        this.person.rest();
        this.major=major;
    }

}

这样的一个代码,运行结果呢如下:

休息一会!

休息一会!

学习

休息一会!

zhb

我的问题是:我把s.person.rest();删去之后,第一个休息一会没有了。但是第二个休息一会还在,这个第二个休息一会是怎么来的?

尚新途

image.png

雨化田
6楼

1672908405270.png

这个类里面的studu()方法应该要写在构造器外面吧?以及person2是咋来的呀

尚新途

这里视频里是有person2这个变量的哦,study也不在构造器里,主要以视频为主就可以了

image.png

是娇妹呀~?
7楼
package com.company;

public class classTest {
    public static void main(String[] args) {
        student student = new student("高琪", 180, "教师");
        student.study();


    }
}
class person{
    String name;
    int hight;
    public void rest(){
        System.out.println("我要休息一会re");
    }
}
class student{
    String major;
    person person = new person();
    public void study(){
        System.out.println("我要学习!");
        person.rest();
        System.out.println(this.person.name);
        System.out.println(this.person.hight);
        System.out.println(this.major);
    }

    public student(String name,int hight,String major) {
        this.person.name = name;
        this.person.hight= hight;
        this.person.rest();
        this.major = "教师";
    }

}

image.png

尚新途

因为我们在main方法中创建了student对象,在创建对象的时候会调用studnet构造方法,在构造方法中我们调用了rest方法。

🍔🍔
8楼
老师为什么在方法里可以组合,但是外面的变量不能组合

image.png

尚新途

1665485236(1).png

学学Java吧
9楼

图片.png

老师这个部分 如果我想新建的名字不叫person 2 叫 person1111的话 应该怎么组合呢?


尚新途

image.png

尚新途

现在 明白了 是用类新建一个 叫person2 的

类似与 person2 p2 = new person2();当时老师这块代码俩个名字一样 一时没有分清楚


尚新途

好的好的,懂了就好,不懂了在问老师哦

逍遥书生
10楼

中间这段是什么意思,通过构造方法传参数赋值给person2类里面的相关变量吗?那都加了对象名为何还要thisimage.png

尚新途

可以不加this的,运行的结果是一样的,但是major需要加this,如果不加this就会使用就近原则,获取的就不是成员变量了,是局部变量了。加this是讲师的一种习惯。

image.png

我的小猪会飞
11楼
public class Test {
    public static void main (String[] args){
        Student s = new Student("张三",176,"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 height,String major){
        this.person.height = height;
        this.person.name = name;
        this.major = major;
        System.out.println("这是一个构造方法");
    }
    public void study(){
        System.out.println("学习");
    }
}
老师我有两个疑问?
  1. 方法Student这是不是一个有参构造

  2. Student创建对象时传的参数有什么作用

尚新途

1.方法Student这是不是一个有参构造

通过查看同学的代码public Student(String name,int height,String major)

这个就是 Student 类上的有参构造方法呢


2.Student创建对象时传的参数有什么作用

可以在创建对象的时候,为成员变量进行赋值

、眼前人
12楼

image.png

尚新途

你要问什么呢?没有明白你的意思啊同学。

、眼前人
13楼

image.png
麻烦看下,这是为什么


{
    ([] args) {
        = Student2(,,);
        .name = ;
        .height = ;
        .= ;

        ..println(.);
        ..println(.);
        .study();

    }
}

{   ;   ;    (){ ..println();
    }
}

{  =Person2();   ;  (){ ..println();
        ..rest();
        ..println(..);
    }

    (name,height,major){
        ..=name;
        ..= height;
        .=major;
    }
}


尚新途

你把这个TestComponent发过来,首先你的Student2里面有没有name和height这两个属性,然后这两个属性是不是私有的属性。

尚新途

你的Student2里面并没有这两个属性,你也没有继承Person2这个类,当然不能用这两个属性了。你在Student2里面继承一下Person2这个类就好了

尚新途

image.png

尚新途

明天老师微信联系你吧

14楼

老师这哥用了组合这个就会报错image.png

尚新途

你的student类没有继承persion类的

微信用户
15楼

1、组合一定是用父类吗?用其他的子类可以吗?

2、已经不是继承了,“将父类对象作为子类的属性”----为什么还会出现“父类”“子类”的叫法?

尚新途

1、可以的

2、这里是通过继承去理解组合。

自我检测(5S)