java多态,简述重写和重载
重载1 .构造函数重载构造函数的名称必须与类名相同,因此同一类的所有构造函数名称必须相同,以配置重载; 为了使系统能够区分不同的构造函数,多个构造函数的参数列表必须不同。
class Person{ int age; 字符串名称; public Person () public person (intage ) ) { this.age=age; }公共人员(intage,字符串名称) this ) age; this.name=name; }2.方法重载(开销) )。
1 .定义:允许同一个类中有多个同名的方法。 但是,参数的个数或类型不同即可。
两个相同的区别”:相同的类、相同的方法名称
参数列表不同:参数个数不同,参数类型不同
2 .范例:
重载到Arrays类中的sort ()/binarySearch () ) ) )。
3 .判断是否重载:
跟方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系!
class person { public void getsum (inti,int j ) {//A System.out.println ) }愚蠢); }公共void getsum (double D1,double d2 )//b (public void getsum ) String s,int i )//形参的优先级不同,重载///c } publl ! 返回0; }公共语音getsum (intm,int n )//与参数名称无关! }privatevoidgetsum(intI,int j )//与权限修饰符的大小无关! }} 4. 在通过对象调用方法时,如何确定某一个指定的方法 :
方法名------参数列表
为什么要重写:父类的功能无法满足子类的需求
方法重写的前提:必须要存在继承的关系!
应用:如果在重写后创建子类对象,然后从子类对象中调用具有相同名称的子类参数的方法,则子类将在实际运行时重写父类的方法
重写规定:方法声明:权限修饰符返回类型方法名称(形参数列表) throws异常类型
//方法论
}
约定俗名:一种称为子类重写的方法,一种称为父类重写的方法
A. 子类重写的方法的方法名和形参列表与父类被重写的方法的方法名和形参列表相同
B. 子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符
特殊情况:1)子类不能重写在父类中声明为private权限的方法(不可见) )。
2 )特别注意子类和父类是否为同一包,对包的访问权限。
2 )的解释:对于包的访问权限,只能在同级目录下的包的类之间看到。 对于不同包的Animal和Dog类,我不知道Animal有eat方法,所以无法编写。
c .返回类型:
父类重写的方法的返回类型为void,子类重写的方法的返回类型仅为void
如果父类被重写方法的返回类型为a类型,则子类被重写方法的返回类型可以是a类或a类子类
//这样计算改写。 String不像Object的子类pulbic Object show ()//父类方法) } public string show (//子类方法)//那样重写,而是返回类型不同的PPP
d .子父类被重写的方法的返回值类型是基本数据类型(比如:double).则子类重写的方法的返回值类型必须是相同的(double)
抛出异常类型更少、异常类型更小、不抛出异常)子类和父类中的同名同参数的方法要么都声明为非static的(考虑重写),要么都声明为static的(不是重写)。
注意:A 父类的静态方法不能被子类覆盖为非静态方法。 B 父类的静态方法不能被子类覆盖为静态方法。(这两点与上面的那句话表达的是一个意思)
E.静态方法不能被重写
原因:重写依赖于类的实例,而静态方法和类实例并没有什么关系。而且静态方法和类实例并没有什么关系。而且静态方法在编译时就已经确定,而方法重写是在运行时确定的(动态绑定)。(也可以说java多态体现在运行时、而static在编译时、与之相悖)
《JAVA编程思想》中多次的提到:方法是静态的、他的行为就不具有多态性。静态方法是与类、而非单个对象相关联的。
区分方法的重载和重写
重载:不表现为多态性。
重写:表现为多态性。
从编译和运行的角度来看:
重载,是指允许存在多个同名方法,而这些方法的参数不同。编译器根据方法不同的参数列表,对同名方法的名称做修饰。对于编译器而言,这些同名方法就成了不同的方法。他们的调用地址在编译期间就绑定了。Java的重载是可以包括父类和子类的,即子类可以重载父类的同名不同参数的方法。
所以:对于重载而言,在方法调用之前,编译器就已经确定了所要调用的方法,这称为“早绑定”或“静态绑定”;
而对于多态,只有等到方法调用的那一刻,解释运行器才会确定所要调用的具体方法,这称为“晚绑定”或“动态绑定”;
引用一句Bruce Eckel的话:“不要犯傻,如果它不是晚绑定,它就不是多态。”
重写规则补充
1.父类的抽象方法可以被子类通过两种途径重写(即实现和重写)。
2.父类的非抽象方法可以被重写为抽象方法(此时:子类必须为抽象类)。