単式ホーム1面1線と島式ホーム1面2線、合計2面3線のホームを持つ地上駅。単式ホームの1番のりば側に駅舎があり、島式ホームの2・3番のりばへは跨線橋を渡ることになる。ほとんどの列車が1・3番のりばを使用し、2番のりばは岡山駅 - 当駅間の区間列車の折り返し（1日3往復）のみに使われている。2013年3月15日までは夜に当駅止まりがあったが、翌16日の改正で次の三石駅まで行くようになった。山陽本線の岡山支社管内区間はCTC未導入の状態が続いたため、運転業務を行う関係上駅員が配置されていた。みどりの窓口がない駅では珍しく委託駅ではなく、東岡山駅が管理する直営駅であった。2016年5月の運行管理システム稼働に伴い、三石駅とともに同年5月31日で窓口の営業を終了し翌6月1日より無人駅となった。自動券売機が、設置されている。2018年9月のICカードICOCAエリア拡大・統合に伴い、簡易型自動改札機が設置され、ICOCAの利用も可能となった。
鹿児島交通時代に自社導入された車両はエアサスなど高スペックを備えていた。しかし現在では首都圏・関西圏の事業者で使用されていた車両を中古導入しているケースがほとんどであり、様々なバリエーションを誇る。
本形式は、サラシ液専用の30t 積タンク車として1955年（昭和30年）12月に、1ロット1両（コタキ4900）が日立製作所にて製作された。記号番号表記は特殊標記符号「コ」（全長 12 m 以下）を前置し「コタキ」と標記する。本形式の他にサラシ液を専用種別とする形式には、タ4100形（3両）、タラ600形（2両）、タラ700形（2両）、タサ4900形（1両）、タキ4950形（4両、後述）、タキ8050形（1両）、タキ16100形（4両）、タキ18500形（6両）の8形式があった。所有者は、徳山曹達で、常備駅は山陽本線の周防富田駅（現在の新南陽駅）であった。1979年（昭和54年）10月に制定された化成品分類番号では、侵80（侵食性の物質、腐食性物質、危険性度合3（小））が標記された。タンク体は普通鋼（一般構造用圧延鋼材 SS41、現在のSS400）製で、タンク体内面にゴムライニングが施されていた。荷役方式はタンク上部の液入管からの上入れ、液出管と空気管使用による上出し方式である。車体色は黒色、寸法関係は全長は11,800mm、全幅は2,330mm、全高は3,730mm、台車中心間距離は7,600mm、自重は17.1t、実容積は26.2m³、換算両数は積車4.5、空車1.8であり、台車はベッテンドルフ式のTR41Cである。1982年（昭和57年）12月 に廃車となり同時に形式消滅となった。
インスタンス変数 (instance variable) とは、Smalltalk等のオブジェクト指向言語において、オブジェクトのインスタンスごとに割り当てられた変数のことである。フィールド (field)、データメンバ (data member)、メンバ変数 (member variable) とも呼ばれる。それに対してクラス変数は、同じクラスに対する全てのインスタンスが同じ値を共有する。インスタンス変数は、インスタンスフィールド (instance field) あるいは、略して「フィールド」と呼ぶこともある (本来、この「フィールド」の意味には、「クラス変数」も含まれるが、プログラミング言語によってはインスタンス変数のことを「フィールド」と呼び、クラス変数とは名前を区別しているものもある)。UMLではインスタンス変数のことを属性 (attribute) とも呼ぶ。Javaのクラスを用いた例を示す。class Foo {  String bar;  static String baz;}上記の例において、barはクラスFooのインスタンス変数である。それに対して、bazはクラス変数である。以下のプログラムで、Fooクラスを用いてクラス変数とインスタンス変数の違いを示す。プログラム例:class TestFoo {  public static void main(String [] args) {    Foo foo1 = new Foo();    Foo foo2 = new Foo();    foo1.bar = "foo1.bar"; // foo1.bar (インスタンス変数) に"foo1.bar"を代入    foo1.baz = "foo1.baz"; // foo1.baz (クラス変数) に"foo1.baz"を代入    foo2.bar = "foo2.bar"; // foo2.bar (インスタンス変数) に"foo2.bar"を代入    foo2.baz = "foo2.baz"; // foo2.baz (クラス変数) に"foo2.baz"を代入    System.out.println("foo1.bar=" + foo1.bar + " foo1.baz=" + foo1.baz);    System.out.println("foo2.bar=" + foo2.bar + " foo2.baz=" + foo2.baz);  }}実行結果:foo1.bar=foo1.bar foo1.baz=foo2.bazfoo2.bar=foo2.bar foo2.baz=foo2.baz上記のプログラムにおいて、foo1.bazとfoo2.bazはFooクラスのクラス変数を表している。つまり、foo1.bazとfoo2.bazが表しているインスタンスは同一である。そのため、結果として出力されるfoo1.bazとfoo2.bazの値は同じとなる。逆に、foo1.barとfoo2.barはインスタンス変数であり、独立した変数である。そのため、結果として出力されるfoo1.barとfoo2.barは異なった値となる。