zoukankan      html  css  js  c++  java
  • 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("小明爱上了吃面条");
                }
            });
        }
    }
    View Code

     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("老师不抽中华了,爱上了雪茄");
                }
            });
        }
    }
    View Code

    三、返回引用类型值

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

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

    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();
        }
    }
    View Code
  • 相关阅读:
    struts2标签具体解释
    证明N={1,2,...,n,...}最高万元 黄晓宁
    Oracle 11g 环境,使用utl_smtp创建一个存储过程来发送邮件
    通过非暴力促进国内操作系统的可行性分析
    pig 的chararry不能用于比较的类型可以comparison operator
    Tair LDB基于Prefixkey找到如何提取一系列性能优化项目key的prefix_size
    hdu 5073 Galaxy(2014acm鞍山亚洲分部 D)
    乐趣与你rabbitMQ 源代码
    我们的空间是它圆——基于Poicare对宇宙的模型
    自己主动旋转木马,自己主动作为幻灯片标题类似或图片
  • 原文地址:https://www.cnblogs.com/zfg-technology/p/4563760.html
Copyright © 2011-2022 走看看