java面向对象有三种类型,封装、继承和多态。其中封装的作用就在于将不同功能的代码分到不同的类中,减少java操作过程中报错的频率,提升团体的效率。
但封装后,如何准确地进行不同类之间功能的衔接,还是相等重要的。接下来,介绍3种调用的类型。
【接下来为了陈述的便利和直白,就将要调用的类称之为A:animal,而要使用的类称之为B:habit。】
A,animal中有的属性为name、age、品种。
B,habit中有的属性为sleep、eat。
在test运行类中,要实现的是打印出name、sleep。
跨类调用方法
一、在B类中创建和A类中一样的属性
1、在B类方法的参数中,声明和A类相同的属性
public void habit2(String name,int age){
System.out.println("名字"+name+"岁数"+age+"睡眠状况"+getSleep());
}
2、在test类的主方法中调用
habit h1=new habit("daytime","猫粮");
h1.habit2("小花",3);
二、对象作为参数传递
这种方式适合对一个类进行多个方法或属性调用的情况。
并且省下了声明多个属性的步骤,实现对某个属性的重复调用。
0、import+域名+类名
如果要调用的类A和本类B处于同一个包(通俗来说是文件夹)下面,就可以省略。
1、在B这个用到A2个属性的方法中
将A类放入传参的括号内。
public void habit1(animal an){
System.out.println("名字"+an.getName()+"睡眠:"+getSleep()+"吃东西习惯"+getEat());
}
public void habit1(类 +类的对象名)
这是直接在传入的过程中,就实例化了,如括号中的an就直接指向了animal类的内存空间。
因此在方法中,可以直接以对象名去调用。
2、在主方法中调用时,
记得在habit1方法中传入animal的实例化对象,比如A1。
如
animal A1=new animal("小花",3,"lihua");
habit h1=new habit("daytime","猫粮");
h1.habit1(A1);
否则就会显示
Error:(16, 11) java: 无法将类 com.company.habit中的方法 habit1应用到给定类型;
需要: com.company.animal
找到: 没有参数
原因: 实际参数列表和形式参数列表长度不同
注意在这个阶段,很容易出错。
要保证在A中创建好了无参构造方法。
【tips,如果A中存在着有参构造方法,那么系统就不会自动根据你这句实例化方法创建。反之,若没有有参构造方法,那么就会自动生成。】
三、类的对象作为属性调用
1、在B类中,声明A类作为一个属性
private animal an;
2、既然是属性,则需要创建相应的get和set方法,并在有参方法中加入该属性。
public animal getAn() {
if(this.an==null){
animal an=new animal();
}
return an;
}
public void setAn(animal an) {
this.an = an;
}
public habit(String sleep, String eat,animal an) {
this.sleep = sleep;
this.eat = eat;
this.an=an;
}
ps:
get方法中需要避免传入的类对象是个空的。
3、在B类中具体调用A类方法时,
需要分2步走
一是调用本类中的get方法
二是调用A类中具体的方法。
public void habit2(){
System.out.println("名字"+this.getAn().getName()+"岁数"+this.getAn().getAge()+"睡眠状况"+getSleep());
}
4、在test类中的具体调用代码
animal A1=new animal("小花",3,"lihua");
habit h1=new habit("daytime","猫粮",A1);
h1.habit2();
四、总结比较
这三种方法各有优势,
从代码量上看,呈现出越来越多的代码。
但功能上来说
1、第一种在B类中重新声明属性
虽然在调用时,简单。
但是如果重新声明的属性值过多,那就是一种负担,并且容易弄混,比如属性的类型和名字。
而且只能在一个方法中使用。
2、第二种在B类中将A类作为对象传入
这相对于第一种重新声明,节省了声明的量,也不容易混淆。
但是同样也只能在传入的方法中使用。
3、第三种在B类中将A类作为属性声明
虽然需要增加set、get、有参方法中添加参数等。
但是A类的方法能够在B类全局中调用。
复用的价值更大。
温馨提示💓
如果在运用时遇到问题,可以直接关注并私信我,发送报错问题,我看到后会第一时间回复~