构造器是否可被重写
答案:构造器是不能被继承的,因为每个类的类名都不相同,而构造器名称与类名相同,所以根本谈不上继承。
又由于构造器不能继承,所以就不能被重写。但是,在同一个类中,构造器是可以被重载的。
这里再次给出重写和重载(Java)的含义和一些例子加深印象:
一 重载
1 概念
对于同一个类,如果这个类里面有两个或者多个重名的方法,但是方法的参数个数、类型、顺序至少有一个不一样,这时候局构成方法重载
2 示例
public class Test{ public void a( ){ } public void a(int i){ } }
说明:在Test类中有两个方法,名字都相同,都是a。在调用方法a时,如果不传参数,则系统会自动调用第一个方法a,如果传入一个 int 类型的参数,则系统调用第二个方法a。
public class Test{ public void a(int i){ } public void a(String j){ } }
说明:在Test类中有两个同名的方法a。在调用方法时,如果传入一个int类型的参数,则会自动调用第一个a方法,如果传入一个String类型的参数,则会自动调用第二个方法a。
public class Test{ public void a(int i,String j){ } public class a(String j,int i){ } }
说明:在Test类中有两个同名的方法。在调用方法时,如果传入的第一个参数类型为int,第二个参数类型为String,则自动调用第一个方法a。如果传入的第一个参数为String类型,第二个参数类型为int,则自动调用第二个方法a。
3 作用
方法重载就是对不同数据类型的的数据实现相似的操作。
二 重写
1 概念
当一个子类继承一父类,而子类中的方法与父类中的方法的名称,参数个数、类型都完全一致时,就称子类中的这个方法重写了父类中的方法。
重写也是覆盖 override
2 前提:
必须要有继承关系
3 特点
(1):当子类重写了父类的函数,那么子类的对象如果调用该函数,一定调用的是重写过后的函数。可以通过super关键字进行父类的重写函数的调用。
(2): 继承可以使得子类增强父类的方法
4 细节
(1): 函数名必须相同
(2):参数列表必须相同
(3): 子类重写父类的函数的时候,函数的访问权限必须大于等于父类的函数的访问权限否则编译报错
(4):子类重写父类的函数的时候,返回值类型必须是父类函数的返回值类型或该返回值类型的子类。不能返回比父类更大的数据类型
5 示例
class Animal{ int x=1; String name; void eat(){ System.out.println("吃东西"); } void shout(){ System.out.println("我是动物"); } } class Dog extends Animal{ void eat(){ System.out.println("啃骨头"); } void shout(){ System.out.println("旺旺"); } void eat(String food){ System.out.println("吃:"+food); } } class Cat extends Animal{ void eat(){ System.out.println("吃老鼠"); } void shout(){ System.out.println("喵喵"); } } class Demo9{ public static void main(String[] args){ Dog d=new Dog(); d.shout(); d.eat(); Cat c=new Cat(); c.shout(); c.eat(); System.out.println(); } }
说明:
- 动物类有名字,有吃和叫的方法
- 狗继承动物重写父类吃和叫的方法
- 猫继承动物重写父类吃和叫的方法
三 重载和重写的不同
1 重载(overload)
1:前提: 所有的重载函数必须在同一个类中
2:特点:函数名相同,参数列表不同,与其他的无关(访问控制符、返回值类型)
3:不同:个数不同 、 顺序不同、 类型不同
2 重写(override)
1:前提:继承
2:特点:函数名必须相同、参数列表必须相同。子类的返回值类型要等于或者小于父类的返回值类型
