美文网首页
二十三、自定义数据类型

二十三、自定义数据类型

作者: 圣贤与无赖 | 来源:发表于2018-08-21 05:56 被阅读9次

一、 辨析成员变量与方法参数的设计定义

如果变量是该类的一部分时,定义成成员变量。
如果变量不应该是类的一部分,而仅仅是功能当中需要参与计算的数,则定义为形参变量。

举例:
 定义长方形类,包含求周长与求面积的方法
 定义数学工具类,包含求两个数和的二倍与求两个数积的方法
思考:这两个类的计算方法均需要两个数参与计算,请问两个数定义在成员位置还是形参位置更好,为什么?
数学工具类:

public class MathTool {
    //求两个数的和的二倍
    public static double sum2times(int number,int number2) {
        return (number+number2)*2;
    }
    //求两个数的积
    public static double area(int number,int number2) {
        return number*number2;
    }
}

长方形类:

public class CFX {
    //因为长与宽,在现实事物中属于事物的一部分,所以定义成员变量
    private int chang;
    private int kuan;
    
    public CFX(int chang, int kuan) {
        this.chang = chang;
        this.kuan = kuan;
    }
    
    //求长与宽的周长
    public double zhouChang() {
        return (chang+kuan)*2;
    }
    //求长与宽的面积
    public double mianJi() {
        return chang*kuan;
    }
    public int getChang() {
        return chang;
    }
    public void setChang(int chang) {
        this.chang = chang;
    }
    public int getKuan() {
        return kuan;
    }
    public void setKuan(int kuan) {
        this.kuan = kuan;
    }
}

二、 类作为方法参数与返回值

1.类作为方法参数
在编写程序中,会经常碰到调用的方法要接收的是一个类类型的情况,那么这时,要向方法中传入该类的对象。如下代码演示:

class Person{
    public void show(){
        System.out.println("show方法执行了");
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        //创建Person对象
        Person p = new Person();
        //调用method方法
        method(p);
    }
    
    //定义一个方法method,用来接收一个Person对象,在方法中调用Person对象的show方法
    public static void method(Person p){
        p.show();
    }
}

2.类作为方法返回值
写程序调用方法时,我们以后会经常碰到返回一个类类型的返回值,那么这时,该方法要返回一个该类的对象。如下代码演示:

class Person{
    public void show(){
        System.out.println("show方法执行了");
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        //调用method方法,获取返回的Person对象
        Person p = method();
        //调用p对象中的show方法
        p.show();
    }
    
    //定义一个方法method,用来获取一个Person对象,在方法中完成Person对象的创建
    public static Person method(){
        Person p = new Person();
        return p;
    }
}

三、 抽象类作为方法参数与返回值

1. 抽象类作为方法参数
今后开发中,抽象类作为方法参数的情况也很多见。当遇到方法参数为抽象类类型时,要传入一个实现抽象类所有抽象方法的子类对象。如下代码演示:

//抽象类
abstract class Person{
    public abstract void show();
}
class Student extends Person{
    @Override
    public void show() {
        System.out.println("重写了show方法");
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        //通过多态的方式,创建一个Person类型的变量,而这个对象实际是Student
        Person p = new Student();
        //调用method方法
        method(p);
    }
    
    //定义一个方法method,用来接收一个Person类型对象,在方法中调用Person对象的show方法
    public static void method(Person p){//抽象类作为参数
        //通过p变量调用show方法,这时实际调用的是Student对象中的show方法
        p.show();   
}
}

2.抽象类作为方法返回值
抽象类作为方法返回值的情况,也是有的,这时需要返回一个实现抽象类所有抽象方法的子类对象。如下代码演示:

//抽象类
abstract class Person{
    public abstract void show();
}
class Student extends Person{
    @Override
    public void show() {
        System.out.println("重写了show方法");
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        //调用method方法,获取返回的Person对象
        Person p = method();
        //通过p变量调用show方法,这时实际调用的是Student对象中的show方法
        p.show();
    }
    
    //定义一个方法method,用来获取一个Person对象,在方法中完成Person对象的创建
    public static Person method(){
        Person p = new Student();
        return p;
    }
}

四、 接口作为方法参数与返回值

1. 接口作为方法参数
接口作为方法参数的情况是很常见的,经常会碰到。当遇到方法参数为接口类型时,那么该方法要传入一个接口实现类对象。如下代码演示。

//接口
interface Smoke{
    public abstract void smoking();
}
class Student implements Smoke{
    @Override
    public void smoking() {
        System.out.println("吸口烟,赛神仙");
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        //通过多态的方式,创建一个Smoke类型的变量,而这个对象实际是Student
        Smoke s = new Student();
        //调用method方法
        method(s);
    }
    
    //定义一个方法method,用来接收一个Smoke类型对象,在方法中调用Smoke对象的show方法
    public static void method(Smoke sm){//接口作为参数
        //通过sm变量调用smoking方法,这时实际调用的是Student对象中的smoking方法
        sm.smoking();
    }
}

2.接口作为方法返回值
当遇到方法返回值是接口类型时,那么该方法需要返回一个接口实现类对象。如下代码演示。

//接口
interface Smoke{
    public abstract void smoking();
}
class Student implements Smoke{
    @Override
    public void smoking() {
        System.out.println("吸口烟,赛神仙");
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        //调用method方法,获取返回的会吸烟的对象
        Smoke s = method();
        //通过s变量调用smoking方法,这时实际调用的是Student对象中的smoking方法
        s.smoking();
    }
    
    //定义一个方法method,用来获取一个具备吸烟功能的对象,并在方法中完成吸烟者的创建
    public static Smoke method(){
        Smoke sm = new Student();
        return sm;
    }
}

相关文章

  • 二十三、自定义数据类型

    一、 辨析成员变量与方法参数的设计定义 如果变量是该类的一部分时,定义成成员变量。如果变量不应该是类的一部分,而仅...

  • Java注解annotation 异常: invalid typ

    我们经常会自定义注解,自定义注解时,可能会需要定义各种数据类型,但是自定义注解可以包含哪些数据类型,是存在限制的。...

  • Go-Struct

    自定义类型 类型别名 go 结构体 Go语言提供了一种自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构...

  • 6-java基础语法

    内容介绍:自定义类ArrayList集合 1 引用数据类型(类) 1.1 引用数据类型分类 提到引用数据类型(类)...

  • python序列化与反序列化

    每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Python也是...

  • JS案例19-简单数据类型不能自定义属性

    简单数据类型不能定义属性 源码: 结论 结论,简单数据类型不能自定义属性,复杂数据类型可以;

  • 一:Java基础入门-数据类型

    1: 什么是数据类型? Java语言分为基本数据类型、引用数据类型和自定义类型。 基本数据类型共有8种。 引用数据...

  • 泛型

    自定义泛型:就是一个数据类型的占位符或者是一个数据类型的变量。 方法上自定义泛型: 在泛型中不能使用基本数据类型,...

  • VBA 学习笔记1 基本语法

    数据类型 VBA公有12种数据类型,具体见下表,此外用户还有可以根据以下类型用Type自定义数据类型 数据类型类型...

  • 数据库探索之旅——数据类型

    目录 1. 何为数据类型2. 数据类型列表3. 用户自定义数据类型4. 数据类型优先级 在学习基本表之前,需要先了...

网友评论

      本文标题:二十三、自定义数据类型

      本文链接:https://www.haomeiwen.com/subject/mczriftx.html