【问题标题】:Converting PHP to Java将 PHP 转换为 Java
【发布时间】:2011-08-07 04:08:45
【问题描述】:

我已经使用 PHP 6 年了,并且获得了它的认证,但是最近我决定我应该学习 Java,因为我在 Zend 框架上工作了很多,它是受 Java 启发的,但现在我有了可能是 Java 的一个愚蠢问题。

在 PHP 中我会这样做:

class Cool
{
    protected $_name;

    function __construct($name)
    {
        $this->_name = $name;
    }

    function showName()
    {
        echo "{$this->_name} is a cool guy";
    }
}

class Bad extends Cool
{
    function showName()
    {
        echo "{$this->_name} is a bad guy";
    }
}

$bad = new Bad("jhon");
// prints jhon is a bad guy

由于 Java 不继承构造函数,那么在 Java 中执行此类操作的最佳方法是什么?我是否必须想出不同类型的模式来解决这种事情?

感谢您的帮助,因为我对 Java 很陌生,而且我经常使用这种东西,所以我想知道在 Java 中是否有任何很酷的方法。我需要在分配给我的新项目中使用它。

【问题讨论】:

    标签: java php inheritance constructor


    【解决方案1】:

    在 Java 中,您必须为每个类编写一个构造函数并调用 super() 以使用父类的构造函数。如果不想修改构造函数,只需要在子类构造函数中调用super()即可。

    在这种情况下,Bad 看起来像这样:

    public class Bad extends Cool {
        public Bad(String name) {
            super(name);
        }
        // Any other additions
    }
    

    【讨论】:

      【解决方案2】:

      你是正确的,构造函数不是继承的,你需要这样做:

      public class Bad extends Cool {
       public bClass( String name ) {
         super( name );
       }
      }
      

      这将调用 supers 构造函数,它是父级的构造函数。

      【讨论】:

        【解决方案3】:

        构造函数不会作为子类的成员直接继承,但任何非私有构造函数都可以通过子类中的相应super 调用访问,这同样有效。当您不想修改超类构造函数的任何行为时,只需向您的子类添加一个采用相同参数并调用super 版本的版本。

        所以你可以把上面的Java代码写成:

        public class Cool {
            protected String name;
        
            public Cool(String name){
                this.name = name;
            }
        
            public void showName() {
                System.out.println(this.name + " is a cool guy");
            }
        }
        
        public class Bad extends Cool {
            public Bad(String name){
                super(name);
            }
        
            @Override
            public void showName() {
                System.out.println(this.name + " is a bad guy");
            }
        }
        
        Cool bad = new Bad("jhon");
        bad.showName(); // prints jhon is a bad guy
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-13
          • 1970-01-01
          • 1970-01-01
          • 2018-03-07
          • 2021-03-21
          • 1970-01-01
          • 1970-01-01
          • 2015-10-15
          相关资源
          最近更新 更多