一、具体类名作为形参与返回值

1.方法的形参是类名,其实需要的是该类的对象

比如有一个具体的猫类,我使用另一个类使用猫类的方法

public class CatOperator {
  public void useCat(Cat c){
      c.eat();
  }
}

那么在调用的时候

public class CatDemo {
  public static void main(String[] args) {
      CatOperator c=new CatOperator();
      //需要创建Cat类的对象,因为useCat方法的形参是Cat类型的参数
      Cat c1=new Cat();
      c.useCat(c1);
  }
}

2.方法的返回值是类名,其实返回的是类的对象

public class CatOperator {
  public void useCat(Cat c){
      c.eat();
  }
  public Cat getCat(){
      //因为返回类型为Cat,则返回值一定为Cat类型
      //创建对象
      Cat c=new Cat();
      return c;
  }
}

那么在调用的时候

public class CatDemo {
  public static void main(String[] args) {
      CatOperator c = new CatOperator();
      Cat c1 = new Cat();
      c.useCat(c1);
      System.out.println("---------------------");
      Cat c2 = c.getCat();//new cat
      c2.eat();
  }
}

二、抽象类名作为形参与返回值

1.方法的形参是抽象类名,实际上需要的是该抽象类的子类对象

public class AnimalOperator {
  //抽象类名作为形参,实际需要的是子类的对象
  public void useAnimal(Animal a){ // Animal a=new Dog()
      a.eat();
  }
public class AnimalDemo {
  public static void main(String[] args) {
      //创建操作类对象
      AnimalOperator a=new AnimalOperator();
      //因为抽象类不能直接实例化需要创建子类使用多态进行处理
      Animal a1=new Dog();
      a.useAnimal(a1);
      }
      }

2.方法的返回值是抽象类名,返回的是该抽象类的子类对象

public class AnimalOperator {
  //抽象类名作为形参,实际需要的是子类的对象
  public void useAnimal(Animal a){ // Animal a=new Dog()
      a.eat();
  }
  public Animal getAnimal(){
      Animal a=new Dog();
      return a;
  }
}
/*测试类
*
* */

public class AnimalDemo {
  public static void main(String[] args) {
      //创建操作类对象
      AnimalOperator a=new AnimalOperator();
      //因为抽象类不能直接实例化需要创建子类使用多态进行处理
      Animal a1=new Dog();
      a.useAnimal(a1);
      System.out.println("----------------------");
      Animal a2=a.getAnimal();
      a2.eat();
  }
}

三、接口名作为形参与返回值

1.方法的形参是接口名,需要的是该接口的实现类对象

2.方法的返回值是接口名,需要的是该接口的实现类对象

/*定义接口
* */
public interface jumpping {
  //定义抽象方法
  void jumpping();
}

/*接口操作类
* */
public class JumppingOperator {
  public void useJumpping(jumpping j){
      j.jumpping();
  }
  public jumpping getJumpping(){
      jumpping j=new Cat();
      return j;
  }

}

public class Cat implements jumpping{
  //重写抽象方法

  @Override
  public void jumpping() {
      System.out.println("毛调高");
  }
}

/*测试类

* */
public class JumppingDemo {
  public static void main(String[] args) {
      //创建操作类对象
      JumppingOperator j=new JumppingOperator();
      //创建子类对象实现接口
      jumpping j1=new Cat();
      j.useJumpping(j1);
      System.out.println("-------------------");
      jumpping j2 = j.getJumpping();
      j2.jumpping();


  }
}

Java基础——引用类型作为形参与返回值的更多相关文章

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

    一.什么是引用类型 在Java中引用类型包括三种:类.抽象类.接口. 二.引用类型作为形参使用 1.类作为形参 /** * 类作为形参,实际传递的是该类的对象 */ class Student { p ...

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

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

  3. [java基础] 遇到的一个关于返回值泛型的问题

    在写代码的时候这样写: import java.util.ArrayList; import java.util.List; public class TestConversion { public ...

  4. 066 01 Android 零基础入门 01 Java基础语法 08 Java方法 02 带参有返回值方法

    066 01 Android 零基础入门 01 Java基础语法 08 Java方法 04 带参有返回值方法 本文知识点:带参有返回值方法 说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进 ...

  5. 065 01 Android 零基础入门 01 Java基础语法 08 Java方法 02 带参无返回值方法

    065 01 Android 零基础入门 01 Java基础语法 08 Java方法 03 带参无返回值方法 本文知识点:带参无返回值方法 说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进 ...

  6. 064 01 Android 零基础入门 01 Java基础语法 08 Java方法 02 无参带返回值方法

    064 01 Android 零基础入门 01 Java基础语法 08 Java方法 02 无参带返回值方法 本文知识点:无参带返回值方法 说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进 ...

  7. 063 01 Android 零基础入门 01 Java基础语法 08 Java方法 01 无参无返回值方法

    063 01 Android 零基础入门 01 Java基础语法 08 Java方法 01 无参无返回值方法 本文知识点:无参无返回值方法 无参无返回值方法 案例 为什么使用方法?--方便复杂问题调用 ...

  8. Java线程:新特征-有返回值的线程

    http://lavasoft.blog.51cto.com/62575/222082/ Java线程:新特征-有返回值的线程 2009-11-04 17:33:56 标签:返回值 职场 线程 休闲 ...

  9. java使用Filter过滤器对Response返回值进行修改

    转:java使用Filter过滤器对Response返回值进行修改 练习时只做了对request 的处理,这里记录一下,filter 对 response的处理. 原文地址:java使用Filter过 ...

随机推荐

  1. C++输入多行数据

    动机 编程题常用需求,比如输入两行数据. 解决思路:使用getline 程序 #include <iostream> #include <vector> #include &l ...

  2. 用Java中的File类模拟实现对系统文件的增删改查效果

    码字不易,三连支持一波吧 IO操作向来是各大语言的热区,而对文件的操作也是重中之重. 那么在Java中也给我们提供了很多关于文件操作的类.今天我就用一个比较基本的File类来模拟实现对文件的增删改查效 ...

  3. LeetCode随缘刷题之两数相加

    逐步解释,有说错的地方欢迎指正. package leetcode.day_12_03; /** * 给你两个非空 的链表,表示两个非负的整数.它们每位数字都是按照逆序的方式存储的,并且每个节点只能存 ...

  4. Solution -「CF 855G」Harry Vs Voldemort

    \(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个点的树和 \(q\) 次加边操作.求出每次操作后,满足 \(u,v,w\) 互不相等,路径 \((u,w ...

  5. Java常用工具类(自用)

    统一响应格式 Response类 @JsonInclude(JsonInclude.Include.NON_NULL) public class Response<T> implement ...

  6. PentestBox在win10里打不开工具 显示无系统命令的解决方法

    PentestBox详细安装过程:http://www.cnblogs.com/ESHLkangi/p/8336398.html 在使用PentestBox的时候出现了打不开工具的问题,最后看到一个大 ...

  7. 为什么说国产BI更适合国内企业?

    ​就算国外BI发展迅速,产品更加完善成熟,但对国内的企业来说,使用起来难免"水土不服",何况还有服务对接过程中的繁琐程.今天就来讨论一下,国内BI和国外BI到底该怎么选择? 国外B ...

  8. 【C# 线程】并发编程的基石——CAS机制

    其实Java并发框架的基石一共有两块,一块是本文介绍的CAS,另一块就是AQS,后续也会写博客介绍. 什么是CAS机制 CAS机制是一种数据更新的方式.在具体讲什么是CAS机制之前,我们先来聊下在多线 ...

  9. 【C# 程序集】C# assembly和module 根本区别

    相同点 两者都有:manifest.metadata.IL 不同点 1.assembly 有main程序函数.module只能附属于程序集,程序集可以拥有多个. 2.metadata的差异 程序集特有 ...

  10. .大内高手专栏: NET中间语言(IL)

    补充知识点:opcode 在前面我们已经知道了,由于计算机只认识0和1,所以,源代码"NOP"是无法直接运行的.当Assembler遇到"NOP"的时候,为了生 ...