“将父类的对象作为子类的属性” 这个说法有点令人困惑,组合关系里不存在继承,所以没有父类和子类的说法, “将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、这里是通过继承去理解组合。