-1

基本クラス:

abstract class Base
{
    abstract public function getLenth();
    abstract public function getName();
}

それから2つのクラス:

final class ObjA extends Base
{
    public function getLenth()
    {
        return 1;
    }

    public function getName()
    {
        return 'Object A';
    }
}

.

final class ObjB extends Base
{
    public function getLenth()
    {
        return 6;
    }

    public function getName()
    {
        return 'Object B';
    }
}

それが1つの解決策です。次のように書き換えることができます。

class Base
{
    public function getLenth()
    {
        return static::LENGTH;
    }

    public function getName()
    {
        return static::NAME;
    }
}

.

final class ObjA extends Base
{
    const LENGTH = 1;
    const NAME = 'Object A';
}

.

final class ObjB extends Base
{
    const LENGTH = 6;
    const NAME = 'Object B';
}

どちらのバージョンが優れているのですか?なぜですか?

編集:

私は2番目に投票します:短いです。しかし、定数の遅延静的バインディングがないJavaでどのように実行できるかは興味深い

4

1 に答える 1

1
    class Base
    {
        private String _name;

        private int _length;

        Base(int length, int name)
        {
            _length = length;
            _name = name;
        }

        public function getLenth()
        {
            return _length;
        }

        public function getName()
        {
            return _name;
        }
    }

    class ObjA extends Base
    {
        public ObjA()
        {
            Base(1, 'Object A');
        }
    }

私はこれが最善の解決策だと信じています

編集:より基本的な例で理由を明確にしましょう:

class Vehicle
{
    private int _wheels;

    Vehicle(int wheels)
    {
        _wheels = wheels;
    }
}

class Corvette extends Vehicle
{
    Corvette()
    {
        Vehicle(4);
    }
}

コルベットには常に 4 つの車輪がありますが、それを定数にするのは適切ではありません。そういうモノ(=乗り物)に共通する性質です。

于 2014-10-11T15:08:37.940 に答える