在学习java类的继承的时候,出现了方法的重载以及方法的重写;为了避免混乱。所以整理了一下;
方法重载
方法重载:在一个类中或者在继承类中都可以
package HomeWork;
/*
重载
*/
public class Test9 {
public double show(double i){
System.out.println("返回值类型不一样");
return i;
}
public void show(int i) {
System.out.println("i=" + i);
}
public void show(int i, int j) {
System.out.println("两个int");
}
public void show(int i, double j) {
System.out.println("一个int,一个double");
}
public void show(double j, int i) {
System.out.println("一个double,一个int");
}
public void show(double j,int ...i){
System.out.println("可变参数");
}
public static void main(String[] args) {
Test9 t=new Test9();
System.out.println("------(一个int)--------");
t.show(2);
System.out.println("-------(一个double)------");
t.show(2.0);
System.out.println("--------(两个int)----------");
t.show(2,2);
System.out.println("--------(一个double,一个int)----------");
t.show(2.0,2);
System.out.println("------(一个int,一个double)------------");
t.show(2,2.0);
System.out.println("------(一个double,一个可变数组)-----------");
t.show(2.0,2,2,2);
}
}
结果:
------(一个int)--------
i=2
-------(一个double)------
返回值类型不一样
--------(两个int)----------
两个int
--------(一个double,一个int)----------
一个double,一个int
------(一个int,一个double)------------
一个int,一个double
------(一个double,一个可变数组)-----------
可变参数
由此可见,在一个类中,重载的条件可以是:
1.参数类型不同
2.参数个数不同
3.参数类型,个数相同,排列顺序不同
注:重载返回值类型可以不同,参考上述代码便得知
下面再来看看能不能在继承类中实现重载:
class person extends Test9{
public void show(double i,double j){
System.out.println("两个double");
}
public static void main(String[] args) {
person person=new person();
person.show(2.0,2.0);
person.show(2,2);
}
}
结果如下:
两个double
两个int
可见,在继承类中也可以实现方法重载
方法重写
方法重写:指在继承类中,子类重写父类的方法,
代码如下:
package Test_06;
public class Animal1 {
public void say(){
System.out.println("我是动物");
}
}
class Cat extends Animal1{
@Override
public void say() {
System.out.println("我是cat");
}
}
class test8{
public static void main(String[] args) {
Animal1 animal1=new Cat();
animal1.say();
}
}
结果如下:
我是cat
另外一种情况:
public class Animal1 {
void say(){
System.out.println("我是动物");
}
}
class Cat extends Animal1{
@Override
public void say() {
System.out.println("我是cat");
}
}
由上可知,方法重写要求:
1.方法名字必须相同
2.子类方法修饰符权限必须大于父类方法修饰符
很多小伙伴是不是以后这样就完了
还有一种情况
public class Animal1 {
Object say(){
System.out.println("我是动物");
return new Object();
}
}
class Cat extends Animal1{
@Override
public Cat say() {
System.out.println("我是cat");
return new Cat();
}
}
重写的方法返回值可以不同
但是要求是:子类的返回值必须时父类方法返回值的子类;
最后一项大家可能不太接触,但也是有的哦!