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
  • 相关阅读:
    由基于qml,c++的串口调试工具浅谈qml与c++混合编程
    qt5_qml_Opengl_shader 第一弹----------------------openglunderqml的简化及介绍
    Delphi 的接口机制——接口操作的编译器实现过程(2)
    Delphi 的接口机制——接口操作的编译器实现过程(1)
    ddd
    [leetcode]Gray Code
    synapse socket总结一:服务器模型
    CentOS 6.5(64bit)安装GCC4.8.2+Qt5.2.1(替换GCC的链接库)
    Qt打开外部程序和文件夹需要注意的细节(Qt调用VC写的动态库,VC需要用C的方式输出函数,否则MinGW32编译过程会报错)
    Qt+SQLite数据加密的一种思路(内存数据库)
  • 原文地址:https://www.cnblogs.com/zfg-technology/p/4563760.html
Copyright © 2011-2022 走看看