- 首先,构造器是不能被继承的,因为每个类的类名都不相同,而构造器名称与类名相同,所以根本谈不上继承。
- 又由于构造器不能继承,所以就不能被重写。但是,在同一个类中,构造器是可以被重载的。
一、重载
- 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):
- 前提: 所有的重载函数必须在同一个类中
- 特点:
函数名相同,参数列表不同,与其他的无关(访问控制符、返回值类型)- 不同:
个数不同 、 顺序不同、 类型不同
- 2:重写(override):
- 前提: 继承
- 特点:
函数名必须相同、参数列表必须相同。
子类的返回值类型要等于或者小于父类的返回值类型。
网友评论