【美高梅4688官方网站】PHP不扶持格局和操作符重载,子类重写的主意与父类对应的法门的称号、重回类型、参数同样

重载:同一个类中,函数名一样,返回值或者参数类型,个数不一样的叫做重载。
覆盖:同名函数,同返回值类型,同参数的叫做覆盖。指的是子类对父类中方法的覆盖。
PHP不支持方法和操作符重载。JAVA不支持操作符的重载(但是“+”实际上是一种操作符重载)。
复制代码 代码如下:
Class Father {
public function fmeth1() {
echo "fmeth1()...
";
}
//public function fmeth1($str1) {
// echo "fmeth1() with $str1...
";
//}
}
Class Son extends Father {
public function fmeth1() {
echo "fmeth1() in son...
";
}
}
$s=new Son();
$s->fmeth1();
?>

漫漫人生路,学点Jakarta基础-重写(覆盖)、重载,人生路jakarta

    首先我们现在开始进入Jakarta的时代,由原甲骨文易主到 Eclipse基金会下,但是不想舍弃java名字,因此基金会重新投票选出了Jakarta EE(雅加达)。但是我们明白换汤汤不换药的道理,基础是不变的因此重新温习。

其中父类中的fmeth1方法是不能重载的。

温习概念

  override:重写(=覆盖)-->一般在子类继承父类时,为了实现不同的功能,重写父类的方法。子类重写的方法与父类对应的方法的名称、返回类型、参数一样,存在垂直的关系。

    overload:重载-->同一个类中方法之间的关系,这些方法的名称相同但是参数形式不同,因此存在水平的关系。重载是根据调用的时参表和形参表、参数顺序(参数类型不同)来选择方法。简单说就是:方法重载就是类的同一种功能的多种实现方式,到底采用哪一种方式,取决于调用者给出的参数。

java中(overload)重载与(override)覆盖的事例小解

规则

在Java语言规范中,一个方法的特征仅包括方法的名字,参数的数目和种类,而不包括方法的返回类型,参数的名字以及所抛出来的异常。在Java编译器检查方法的重载时,会根据这些条件判断两个方法是否是重载方法。但在Java编译器检查方法的置换时,则会进一步检查两个方法(分处超类型和子类型)的返还类型和抛出的异常是否相同。

    重载的规则:

    1.方法名必须一样,参数形式不同(参数的类型、个数、顺序至少有一项是不同)。      

美高梅4688官方网站 1 1 package bank; 2 3 /** 4 * Created by zjc on 2018/3/8. 5 */ 6 public class overload 7 { 8 public float getCount(){ 9 return 0; 10 } 11 public int getCount(int a,int b){ 12 return a+b; 13 } 14 public float getCount(float a, float b){ 15 return a+b; 16 } 17 public float getCount(double c,float d){ 18 return (float)c+d; 19 } 20 private float getCount(float d,double c){ 21 return (float)c+d; 22 } 23 public static void main(String[] args) { 24 overload o = new overload(); 25 System.out.println( o.getCount(2.3f,2.4f)); 26 } 27 } View Code

     ↑在此规则下:方法返回类型可以不同,方法的修饰符可以不同。

     其中参数类型相同时,参数顺序前后没区别,不能构成重载。

     美高梅4688官方网站 2

 

    2.不能通过访问权限、返回值类型、抛出异常进行重载(在1规则不符合的情况下);

     2.1如果只是返回类型不一样:不能够构成重载。

     美高梅4688官方网站 3

       2.2如果只是控制访问修饰符不一样:不能够构成重载。

     美高梅4688官方网站 4

 

    3.方法的异常类型、数目不会对重载造成影响;

QUESTION NO: 3
复制代码 代码如下:
class A {
protected int method1(int a, int b) { return 0; }
}

   重写的规则

    1.重写(子类)与被重写(父类)方法的返回类型、参数、方法名称要一模一样,否则会编译出错。

美高梅4688官方网站 5 1 /** 2 * Created by zjc on 2018/3/8. 3 */ 4 public class override { 5 public static void main(String[] args) { 6 //创建一只猫 7 Cat cat = new Cat(); 8 cat.cry(); 9 Dog dog = new Dog(); 10 dog.cry(); 11 } 12 } 13 class Animal{ 14 int age; 15 String name; 16 17 public void cry(){ 18 System.out.println("我是动物,不知道怎么叫!"); 19 } 20 } 21 //加菲猫 22 class Cat extends Animal{ 23 //覆盖父类 24 public void cry(){ 25 System.out.println("喵喵叫!"); 26 } 27 } 28 //眼镜狗 29 class Dog extends Animal{ 30 //覆盖父类 31 public void cry(){ 32 System.out.println("旺旺叫!"); 33 } 34 } View Code

    2.重写(子类)不能缩小被重写(父类)方法的访问权限(public > protected > default > private)。

       美高梅4688官方网站 6

     父类private 子类public这样可以重写

       美高梅4688官方网站 7

    3.重写(子类)与被重写(父类)方法的抛出的异常要一致,或者是其子类。

    4.被重写(父类)方法不能为private,否则子类只能定义新方法,不能进行重写。

    5.静态方法不能被重写为非静态的方法(编译出错)。

首先我们现在开始进入Jakarta的时代,由原甲骨文易主到 Eclipse基金会下,但...

Which two are valid in a class that extends class A? (Choose two)
A. public int method1(int a, int b) { return 0; }
B. private int method1(int a, int b) { return 0; }
C. private int method1(int a, long b) { return 0; }
D. public short method1(int a, int b) { return 0; }
E. static protected int method1(int a, int b) { return 0; }

310-035中的题目,标准答案是A,C

A是override,access从protected--->public变宽了,因此是正确的。
B,D也是override,B从protected--->private变窄了,D的返回类型变了,所以都错误。
C是overload,access的宽窄和返回类型都无所谓,所以是正确的。
E是override,但是增加了static,因为static method cannot hide the instance method from super class.因此是错误的。
所以选AC。
子类继承父类并且覆盖父类方法的叫override --重写,覆写,覆盖
子类有多个相同方法名称,但是参数不同,叫overload - 重(zhong)载,过载

重载是:
当多个方法具有相同的名字而含有不同的参数时产生
那么对参数不同的调用,实际调用不同的方法
也可以理解为实际上有两个方法,名字同,参数不同!

覆盖(OVERWRITE)注意

不能降低原方法的"可见度

返回类型不同都不能构成方法的覆盖

重载(OVERLOAD)注意
只有参数不同才能构成重载

本文由美高梅4688官方网站发布于美高梅4688官方网站,转载请注明出处:【美高梅4688官方网站】PHP不扶持格局和操作符重载,子类重写的主意与父类对应的法门的称号、重回类型、参数同样

您可能还会对下面的文章感兴趣: