Java引用类型作为形参和返回值

一、什么是引用类型

在Java中引用类型包括三种:类、抽象类、接口。

二、引用类型作为形参使用

1、类作为形参

/**
 * 类作为形参,实际传递的是该类的对象
 */
class Student {

    public void study() {
        System.out.println("Good Good Study, Day Day Up");
    }
}

class StudentDemo {

    public void show(Student s) {
        s.study();
    }
}

public class StudentTest {

    public static void main(String[] args) {

        StudentDemo sd = new StudentDemo();
        Student s = new Student();
        sd.show(s);
    }
}

2、抽象类作为形参

/**
 * 抽象类作为形参,传递的是实现该抽象类的子类对象
 */
abstract class Person {

    public abstract void eat();
}

class XiaoMing extends Person {

    @Override
    public void eat() {
        // TODO Auto-generated method stub
        System.out.println("小明爱吃米饭");
    }
}

class PersonDemo {

    public void show(Person p) {
        p.eat();
    }
}

public class PersonTest {

    public static void main(String[] args) {
        PersonDemo pd = new PersonDemo();
        // 方式一、传递的是实现该抽象类的子类对象
        Person p = new XiaoMing(); // 多态
        pd.show(p);
        System.out.println("------------------");
        // 方式二、直接实现抽象类,传递匿名子类对象
        pd.show(new Person() {

            @Override
            public void eat() {
                // TODO Auto-generated method stub
                System.out.println("小明爱上了吃面条");
            }
        });
    }
}

3、接口作为形参

/**
 * 接口作为形参,传递的是实现该接口的子类对象
 */
interface Teacher {
    // 接口 like a 的关系,并不是所有 Teacher 都抽烟
    public abstract void smoke();
}

class TeacherZhang implements Teacher {

    @Override
    public void smoke() {
        // TODO Auto-generated method stub
        System.out.println("老师爱抽中华");
    }
}

class TeacherDemo {

    public void show(Teacher t) {
        t.smoke();
    }
}

public class TeacherTest {

    public static void main(String[] args) {
        TeacherDemo td = new TeacherDemo();
        // 方式一、传递的是实现该接口的子类对象
        Teacher t = new TeacherZhang(); // 多态
        td.show(t);
        System.out.println("------------------");
        // 方式二、直接实现接口,传递匿名子类对象
        td.show(new Teacher() {

            @Override
            public void smoke() {
                // TODO Auto-generated method stub
                System.out.println("老师不抽中华了,爱上了雪茄");
            }
        });
    }
}

三、返回引用类型值

1、返回类类型值,实际返回的是该类的对象

/**
 * 类作为返回值,实际返回的是该类的对象
 */
class Student {

    public void study() {
        System.out.println("Good Good Study, Day Day Up");
    }
}

class StudentDemo {

    public Student getInstance() {
        return new Student();
    }
}

public class StudentTest2 {

    public static void main(String[] args) {
        StudentDemo sd = new StudentDemo();
        Student s = sd.getInstance();
        s.study();
    }
}

2、返回抽象类类型值,实际返回的是实现该抽象类子类的对象

/**
 * 抽象类作为返回值,实际返回的是实现该抽象类的子类对象
 */
abstract class Person {

    public abstract void eat();
}

class XiaoMing extends Person {

    @Override
    public void eat() {
        // TODO Auto-generated method stub
        System.out.println("小明爱吃米饭");
    }
}

class PersonDemo {

    public Person getIntance() {
        return new XiaoMing();
    }
}

public class PersonTest2 {

    public static void main(String[] args) {
        PersonDemo pd = new PersonDemo();
        Person p = pd.getIntance();
        p.eat();
    }
}

3、返回接口类型值,实际返回的是实现该接口子类的对象

/**
 * 接口作为返回值,实际返回的是实现该接口的子类对象
 */
interface Teacher {
    // 接口 like a 的关系,并不是所有 Teacher 都抽烟
    public abstract void smoke();
}

class TeacherZhang implements Teacher {

    @Override
    public void smoke() {
        // TODO Auto-generated method stub
        System.out.println("老师爱抽中华");
    }
}

class TeacherDemo {

    public Teacher getIntance() {
        return new TeacherZhang();
    }
}

public class TeacherTest2 {
    public static void main(String[] args) {
        TeacherDemo td = new TeacherDemo();
        Teacher t = td.getIntance();
        t.smoke();
    }
}

时间: 2024-10-28 20:48:01

Java引用类型作为形参和返回值的相关文章

Java基础---Java中带参数无返回值方法的使用(三十九)

Java 中带参无返回值方法的使用 有时方法的执行需要依赖于某些条件,换句话说,要想通过方法完成特定的功能,需要为其提供额外的信息才行.例如,现实生活中电饭锅可以实现"煮饭"的功能,但前提是我们必须提供食材,如果我们什么都不提供,那就真是的"巧妇难为无米之炊"了.我们可以通过在方法中加入参数列表接收外部传入的数据信息,参数可以是任意的基本类型数据或引用类型数据. 我们先来看一个带参数,但没有返回值的方法: 上面的代码定义了一个 show 方法,带有一个参数 name

传引用作为形参和返回值_节省参数拷贝的时间

基本的传引用概念 #include <bits/stdc++.h> using namespace std; //说出以下两个函数的区别 int& whatf(int &a,int &b) //如果不希望函数执行过程中 某变量被修改 用const限定 { a=3;b=2; return a; } int whath(int a,int b) { a=3;b=2; return a; } int main() { int a,b; whatf(a,b)++; cout&l

Java基础---Java中无参数无返回值方法使用(三十六)

Java 中无参无返回值方法的使用 如果方法不包含参数,且没有返回值,我们称为无参无返回值的方法. 方法的使用分两步: 第一步,定义方法 例如:下面代码定义了一个方法名为 show ,没有参数,且没有返回值的方法,执行的操作为输出 " welcome to imooc. " 注意哦: 1. 方法体放在一对大括号中,实现特定的操作 2. 方法名主要在调用这个方法时使用,需要注意命名的规范,一般采用第一个单词首字母小写,其它单词首字母大写的形式 第二步,调用方法 当需要调用方法执行某个操作

Java基础---Java中无参数带返回值方法的使用(三十七)

Java 中无参带返回值方法的使用 如果方法不包含参数,但有返回值,我们称为无参带返回值的方法. 例如:下面的代码,定义了一个方法名为 calSum ,无参数,但返回值为 int 类型的方法,执行的操作为计算两数之和,并返回结果 在 calSum( ) 方法中,返回值类型为 int 类型,因此在方法体中必须使用 return 返回一个整数值. 调用带返回值的方法时需要注意,由于方法执行后会返回一个结果,因此在调用带返回值方法时一般都会接收其返回值并进行处理.如: 运行结果: 不容忽视的"小陷阱&

java.lang.Object.hashCode()的返回值到底是不是对象内存地址?

刚学Java的时候我也有过这种怀疑,但一直没有验证:最近在OSCHINA上看到有人在回答问题时也这么说,于是萌生了一探究竟的想法--java.lang.Object.hashCode()的返回值到底是不是对象内存地址? (顺带回顾一下JNI) hashCode契约 说到这个问题,大家的第一反应一定和我一样--去查Object.hashCode的源码,但翻开源码,看到的却是这样的(Oracle JDK 8): /** * Returns a hash code value for the obje

黑马程序员——关于java字节流的read()方法返回值为int的思考(转载)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! -------  之前一直不明白java字节流的read()方法返回值为什么为int,今天在网上找到了答案.以下为转载,原文地址:http://blog.sina.com.cn/s/blog_9e351f9b01015kgp.html 我们都知道java中io操作分为字节流和字符流,对于字节流,顾名思义是按字节的方式读取数据,所以我们常用字节流来读取二进制流(如图片,音乐 等文件).问题是为什么字节流中定义的

指针作为形参和返回值的区别

关于指作为针形参与返回值的常见问题 1.返回栈中局部变量的地址 #include <stdio.h> int *fun(){ int a = 10; // a为当前方法栈中的局部变量,结束即释放 return &a; // 所以传递出去的会是一个无效(非法)地址 } int main(int argc, char const *argv[]) { int *a = NULL; a = fun(); *a = 100; // error,操作非法内存 printf("a = %

慕课网-Java入门第一季-7-5 Java 中带参无返回值方法的使用

1 public class HelloWorld { 2 public static void main(String[] args) { 3 4 // 创建对象,对象名为hello 5 HelloWorld hello = new HelloWorld(); 6 7 // 调用方法,传入两门课程的成绩 8 hello.calcAvg(94, 81); 9 } 10 11 /* 12 * 功能:计算两门课程考试成绩的平均分并输出平均分 13 * 定义一个包含两个参数的方法,用来传入两门课程的成

特别要检查Java文件操作相关方法的返回值

今天遇到一个很狗血的问题,一个功能在开发环境没有问题,但在生产环境出错了. 代码如下:                 ...                 File tmpFile = new File(fileTmpPath); File newFileTarget = new File(filePath); tmpFile.renameTo(newFileTarget); // 修改新文件的权限 FileManageHelper.chmod(newFileTarget); .... 最后