“将父类的对象作为子类的属性” 这个说法有点令人困惑,组合关系里不存在继承,所以没有父类和子类的说法, “将A类的对象作为B类的属性,从然B对象能够使用A类的方法或属性”, 这样是不是更准确一点?
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(..)}
}这个运行不了,是哪里有问题吗
同学,这里代码可以放到代码区么,我这里实现的代码乱码了
这个组合一般什么时候会用到啊?
数据封装的时候会大量使用。
类名.类方法
对象名.类方法都可以用来调用方法吗
被static修饰的方法是类方法,类方法可以直接通过类名去调用,也可以通过new的对象去调用
普通方法只能通过new的对象去调用
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();删去之后,第一个休息一会没有了。但是第二个休息一会还在,这个第二个休息一会是怎么来的?


这个类里面的studu()方法应该要写在构造器外面吧?以及person2是咋来的呀
这里视频里是有person2这个变量的哦,study也不在构造器里,主要以视频为主就可以了

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 = "教师";
}
}
因为我们在main方法中创建了student对象,在创建对象的时候会调用studnet构造方法,在构造方法中我们调用了rest方法。
老师为什么在方法里可以组合,但是外面的变量不能组合



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

现在 明白了 是用类新建一个 叫person2 的
类似与 person2 p2 = new person2();当时老师这块代码俩个名字一样 一时没有分清楚
好的好的,懂了就好,不懂了在问老师哦
中间这段是什么意思,通过构造方法传参数赋值给person2类里面的相关变量吗?那都加了对象名为何还要this
可以不加this的,运行的结果是一样的,但是major需要加this,如果不加this就会使用就近原则,获取的就不是成员变量了,是局部变量了。加this是讲师的一种习惯。

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("学习");
}
}
老师我有两个疑问?方法Student这是不是一个有参构造
Student创建对象时传的参数有什么作用
1.方法Student这是不是一个有参构造
通过查看同学的代码public Student(String name,int height,String major)
这个就是 Student 类上的有参构造方法呢
2.Student创建对象时传的参数有什么作用
可以在创建对象的时候,为成员变量进行赋值

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

麻烦看下,这是为什么
{
([] 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这个类就好了

明天老师微信联系你吧
老师这哥用了组合这个就会报错
你的student类没有继承persion类的
1、组合一定是用父类吗?用其他的子类可以吗?
2、已经不是继承了,“将父类对象作为子类的属性”----为什么还会出现“父类”“子类”的叫法?
1、可以的
2、这里是通过继承去理解组合。