一、什么是引用类型

在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. C# Json格式字符串

    转自:http://www.cnblogs.com/unintersky/p/3884712.html 将Json字符串转化成格式化表示的方法: 字符串反序列化为对象-->对象再序列化为字符串 ...

  2. C#日期格式化,时间

    日期转化一 为了达到不同的显示效果有时,我们需要对时间进行转化,默认格式为:2007-01-03 14:33:34 ,要转化为其他格式,要用到DateTime.ToString的方法(String, ...

  3. docker部署 自动测试脚本记录

    1 首先配置virtualenv, 并启动之,source py3env/bin/activate 2 安装各种必备包 ,如simplejson,chardet, configparser等 3 注意 ...

  4. log4j教程 1、概述

    log4j是一个用Java编写的可靠,快速和灵活的日志框架(API),它在Apache软件许可下发布.    Log4j已经被移植到了C,C++,C#,Perl,Python和Ruby等语言中.   ...

  5. Python 最火 IDE 最受欢迎(转载)

    来自:开源中国社区 链接:https://www.oschina.net/news/86973/packt-skill-up-2017 电子书网站 Packt 刚刚发布了第三届 “Skill UP” ...

  6. 机器学习第1课:引言(Introduction)

    1.前言 Machine Learning(机器学习)是研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能. 它是人工智能的核心,是使计算机具有 ...

  7. 【JUnit】Junit命令行执行、参数化执行、Main方法执行

    参考资料: main方法执行:http://stackoverflow.com/questions/2543912/how-do-i-run-junit-tests-from-inside-my-ja ...

  8. 时间操作(JavaScript版)—最简单比較两个时间格式数据的大小

    呵呵呵,在软件研发过程中假设遇到要比較两个时间的大小.你会怎么做.嗯嗯嗯,非常直观的做法就是把"-"去掉,再比較大小,真的有必要吗?看以下最简单的时间比較方式: <!DOCT ...

  9. PS 如何制作球面化文字效果

    球面化文字效果图....   00newopen-a   00newopen-b     01mew+channel   02ctrl+L   03ctrl+I   04new+wenzi   05R ...

  10. Laravel的本地化

    一.简介 Laravel 的本地化功能提供方便的方法来获取多语言的字符串.语言包存放在 resources/lang 文件夹的文件里.在此文件夹内应该有网站对应支持的语言并将其对应到每一个子目录: / ...