一、什么是引用类型

在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();
}
}

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

  1. Java基础——引用类型作为形参与返回值

    一.具体类名作为形参与返回值 1.方法的形参是类名,其实需要的是该类的对象 比如有一个具体的猫类,我使用另一个类使用猫类的方法 public class CatOperator {   public ...

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

    关于这个问题,查阅了网上的资料,发现证明过程太繁琐,这里我用了反证法. java.lang.Object.hashCode()的返回值到底是不是对象内存地址? hashCode契约 说到这个问题,大家 ...

  3. Java基础00-形参和返回值22

    1. 形参和返回值 1.1 类名作为形参和返回值 1.2 抽象类名作为形参和返回值 代码示例: 方法的形参是抽象类名 抽象动物类:定义了一个抽象的eat方法 动物的操作类:创建一个useAnimal方 ...

  4. Java - 关于基础数据类型的形参和返回值

    1. 当基础数据类型被当作形参时,最好使用其包装类,因为这样可方便调用者传参(基础数据类型亦或是其包装类都可)   2. 当基础数据类型被当作返回值时,最好使用原型,因为这样可以方便调用者接收返回值( ...

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

    public class HelloWorld { public static void main(String[] args) { // 创建对象,对象名为hello HelloWorld hell ...

  6. Java 中带参无返回值方法的使用

    有时方法的执行需要依赖于某些条件,换句话说,要想通过方法完成特定的功能,需要为其提供额外的信息才行.例如,现实生活中电饭锅可以实现“煮饭”的功能,但前提是我们必须提供食材,如果我们什么都不提供,那就真 ...

  7. LY.JAVA面向对象编程.形式参数和返回值

    2018-07-09 13:29:16 运动员和教练案例 /* 教练和运动员案例(学生分析然后讲解) 乒乓球运动员和篮球运动员. 乒乓球教练和篮球教练. 为了出国交流,跟乒乓球相关的人员都需要学习英语 ...

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

    来源:http://www.imooc.com/code/1579 如果方法不包含参数,但有返回值,我们称为无参带返回值的方法. 例如:下面的代码,定义了一个方法名为 calSum ,无参数,但返回值 ...

  9. C++ 中的形参与返回值

    函数调用时,形参对象和返回对象均采用引用方式进行(临时对象作为中介),当一个对象作为参数(非引用)被函数调用时,该对象会通过复制构造函数获得一个临时对象,该临时对象以引用方式传递给函数,简言之,函数会 ...

随机推荐

  1. 如何给JQ的ajax方法中的success()传入参数?

    当时在使用JQuery提供的Ajax技术的时候,我有个需求,就是要给它请求成功后调用的success()方法传入参数: 所以,我就直接这样子写了: <script> function ge ...

  2. OpenGL矩阵类(C++) 【转】

    http://www.cnblogs.com/hefee/p/3816727.html OpenGL矩阵类(C++) 概述 创建&初始化 存取器 矩阵运算 变换函数 实例:模型视图矩阵 实例: ...

  3. 【Hive】Hive 基础

    Hive架构: Hive基础 1 概念 1.1 简介 1.1.1 hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表, 并提供简单的sql查询功能,可以将sql语句 ...

  4. 一分钟学awk够用

    [转载于58同城沈剑] 1.什么是AWK(1)Aho.Weinberger.Kernighan三位发明者名字首字母:(2)一个行文本处理工具: 2.AWK基本原理2.1原理:逐行处理文件中的数据 2. ...

  5. WINDOWS 2003系统时间24小时制与12小时显示格式不一致问题与解决

    WINDOWS 2003 SERVER系统时间24小时制与12小时格式不一致问题,而导致论坛或BLOG不能正常显示更新日期的问题及解决方法问题的方法. 在WIN2003上出现这种情况的原因是在程序中使 ...

  6. 如何看一个VC工程具体是什么工程?

    VC6等可以创建MFC, Win32等工程,拿到一个工程,怎么判断是什么工程呢? VC6全文检索看看有没有theApp 如果有一般就是MFC的 (VS?)看看工程设置,入口点函数写的是什么,/subs ...

  7. ubuntu12.04 下安装nodejs

    liunx里面安装nodejs我也找了非常多文章,貌似对非常多liunx新手来讲不是非常清楚,以下是我结合一些文章,亲自实践得到的安装步骤.同一时候还有大家关心的与seajs紧密相关的spm模块的安装 ...

  8. Python类定义和类继承详解

    类实例化后,可以使用其属性,实际上,创建一个实例之后,可以通过类名访问其属性,如果直接使用类名修改其属性,那么直接影响已经实例化的对象. 类的私有属性: __private_attrs 两个下划线开头 ...

  9. axios 处理并发请求

    //同时发起多个请求时的处理 axios.all([get1(), get2()]) .then(axios.spread(function (res1, res2) { // 只有两个请求都完成才会 ...

  10. 小猪的Git使用总结

    小猪的Git使用总结 文件夹 小猪的Git使用总结 安装配置与文档 下载安装 文档教程相关 概念 Git的四个组成部分 文件的几个状态 Git与SVN版本号版本号控制存储差异 每次Commit时仓库中 ...