传参
引用类型:
引用类型传递,形参的改变会影响实参属于引用传递,传递的是地址值。
当一个方法的形参是一个类 类型(引用类型),那么就传递一个该类的对象
抽象类型:
当一个方法的形参是一个 抽象类 类型,那么就传递一个该抽象类的子类对象。
接口类型:
当一个方法的形参是一个接口类型,那么就传递一个该接口的子类对象。
引用类型与抽象类型代码举例说明:
public class MyTest {
public static void main(String[] args) {
Cat cat = new Cat();//新new一个cat对象,初始化,num=100
test(cat,30);//调用test方法,将数值30传过去,num=30;
cat.setNum(cat,1000);//调用setNum方法,又将数值1000传过去,这时num数值已经被替换为1000,
//因此输出的cat.num=1000;
System.out.println(cat.num);//1000
AA aa = new AA();//创建子类对象,a的初始值为30
test1(aa,89);//调用test1方法,访问的是父类,将父类的a值替换为89
System.out.println(aa.a);//输出结果访问的是子类的a=30;
}
public static void test (Cat cat, int num) {
cat.num=num;
}
public static void test1(MyClass myclass,int a){
//多态的形式,因此访问的是父类的值,父类的值发生改变
myclass.a=a;
}
}
//类 类型 参数传递属于引用传递,形参色改变对实参有影响
class Cat{
int num=100;
public void setNum(Cat cat,int num){
cat.num=num;
}
}
//抽象类
abstract class MyClass{
int a=1;
public abstract void show(int a);
}
//抽象类子类
class AA extends MyClass{
int a=30;
//方法重写
@Override
public void show(int a) {
this.a=a;
}
}
接口类型代码举例说明:
public class MyTest {
public static void main(String[] args) {
AA aa = new AA();
test(aa);
aa.show();//200
System.out.println(MyInterface.num); //200
System.out.println(AA.num);
aa.show();
test(new BB());
}
public static void test(MyInterface myInterface){
System.out.println(myInterface.num);//200
}
}
interface MyInterface{
public static final int num=200;//接口中定义的变量为常量200,不会发生改变
void show();
}
class AA implements MyInterface{
@Override
public void show() {
System.out.println(this.num);
}
}
class BB implements MyInterface{
@Override
public void show() {
}
}
返回值类型
引用类型
一个方法的返回值类型为类 类型,那么就返回一个该类的对象
代码举例说明:
public class MyTest {
public static void main(String[] args) {
Student student=test(100);//
int num = student.num;
System.out.println(num);
}
public static Student test(int num){
Student student = new Student();//new对象,初始值为20
student.num=num;//main方法中调用test方法,并输入num=100,因此这里num替换初始值,num=100
return student;//返回对象
}
}
class Student{
int num=20;
}
抽象类型
一个方法的返回值类型是一个抽象类 类型,那么就返回一个该抽象类的子类对象
代码举例:
public class MyTest {
public static void main(String[] args) {
MyClass myClass = test(800);//调用test方法,num输入800;
System.out.println(myClass.num); //在这里是父类引用调的num,因此输出为父类的200
//向下转型
MySon son= (MySon) myClass;
System.out.println(son.num); //800
}
public static MyClass test(int num){
MySon mySon = new MySon();//new子类对象,初始值为2
mySon.num=num;//由于main方法 中调用test方法,因此num初始值2被覆盖为800
return mySon;//返回对象
}
}
abstract class MyClass {
int num=200;
public abstract void show(int num);
}
class MySon extends MyClass{
int num=2;//被800覆盖
@Override
public void show(int num) {
this.num=num;
}
}
接口类型
一个方法的返回值类型是一个接口类型,那么就返回该接口的 子类对象
代码举例说明:
public class Mytest {
public static void main(String[] args) {
Son son = new Son();
MyInterface myInterface=test(son);
son.hehe();//调用方法,num初始值由600被覆盖为8000
System.out.println(son.num);//8000
System.out.println(MyInterface.num); //直接访问父接口的公共静态常量200
System.out.println("=======================");
System.out.println(myInterface.num); //200
//向下转型
Son s= (Son) myInterface;//将父接口类型向下转换为子类 类型,因此数据为6
System.out.println(s.num); //6
}
public static MyInterface test(MyInterface myInterface){
//System.out.println(myInterface.num);
Son son = new Son();//初始值为600
son.num=6;//覆盖之后为6
return son;
}
}
interface MyInterface{
public static final int num=200;
void hehe();
}
class Son implements MyInterface{
int num=600;
@Override
public void hehe() {
this.num=8000;
}
}