php子类重载父类私有方法的疑问

WBOY
Release: 2016-06-20 12:29:30
Original
1054 people have browsed it

<?php	class A{		private function test(){			echo "testA";		}	}	class B extends A{		public function test($a){			echo "testB".$a;		}	}		$var1=new B;	$var1->test(10);?>
Copy after login

上述代码中:
子类B虽然继承了A,但是A中的test()是私有方法,原则上应该是不会被继承的,为什么在B中定义一个同名但是参数不同的test()会报错呢,这也算是重载的错误吗?


回复讨论(解决方案)

<?php	class A{		private function test(){			echo "testA";		}	}	class B extends A{		private function test($a){			echo "testB".$a;		}		public function test1($a){			$this->test($a);		}	}		$var1=new B;	$var1->test1(10);?>
Copy after login
Copy after login

而将B中的public该为private就不会报错

你看看错误信息不就知道怎么回事了吗?

你看看错误信息不就知道怎么回事了吗?


我知道错误的原因是重写,但是有两个疑问:
1.父类的private方法不是不会被继承吗,为什么会导致重写?
2.为什么子类中public和protected会报错,而private不会报错?
class B extends A{        public function test($a){            echo "testB".$a;        }}
Copy after login

能麻烦解释一下吗?

不是重写,是覆盖
覆盖的条件是保护方式和参数一致
这种从 java 硬拽过来的玩意,违背了 php 的初衷,并最终导致 php 的死亡

连 C# 都在推出“动态语言”了,php 还逐步静态化,这不是倒退吗?

不是重写,是覆盖
覆盖的条件是保护方式和参数一致
这种从 java 硬拽过来的玩意,违背了 php 的初衷,并最终导致 php 的死亡

连 C# 都在推出“动态语言”了,php 还逐步静态化,这不是倒退吗?


重写和覆盖不是一个意思吗?
可能我没表达清楚,我的意思是父类中的private test()方法不是不可以继承吗,那么在子类中理论上我可以起一个名为test()的函数,并且参数列表也是任意的,可是这段代码会报错。 所以是不是不能继承的方法也存在重写?
<?php    class A{        private function test(){            echo "testA";        }    }     class B extends A{        public function test($a){            echo "testB".$a;        }    }         $var1=new B;    $var1->test(10);?>
Copy after login

而下面这段代码在子类中,如果是重写,那么为什么参数列表不一致正确呢?
<?php	class A{		private function test(){			echo "testA";		}	}	class B extends A{		private function test($a){			echo "testB".$a;		}		public function test1($a){			$this->test($a);		}	}		$var1=new B;	$var1->test1(10);?>
Copy after login
Copy after login

B::test 是重新定义,或是说是重写(覆盖)
重载,在 php 中是不支持的

至于说那些所谓的语法检查,那都是胡扯的,硬拽进来拖慢 php 速度用的

B::test 是重新定义,或是说是重写(覆盖)
重载,在 php 中是不支持的

至于说那些所谓的语法检查,那都是胡扯的,硬拽进来拖慢 php 速度用的


就是说B::test()跟父类没有半毛钱关系对吧,谢谢了。

对的,对的,对的

B::test 是重新定义,或是说是重写(覆盖)
重载,在 php 中是不支持的

至于说那些所谓的语法检查,那都是胡扯的,硬拽进来拖慢 php 速度用的


或者说此处不存在重写,只是在B类中定义了一个新的函数test()而已。

但形式上是重写了

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!