面向对象-------方法重写与方法重载

1.方法重载

Java允许同一个类中定义多个同名方法,只要它们的形参列表不同即可。如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,这种情况被称为方法重载(overload)。

在类中定义了重载方法后,对重载方法的调用与一般的调用方法相同。

例如:

public class OverloadDemo{

    public void display(int a){
        System.out.println("a= "+a);
}
    public void display(double d){
        System.out.println("d= "+d);
}
    public void display(){
        System.out.println("无参数方法");
}
public void display(int a,int b){
        System.out.println("a= "+a+",b= "+b);
}
public static void main(String[] args){
    OverloadDemo obj=new OverloadDemo();
    obj.diaplay();
    obj.diaplay(10);
    obj.display(50,60);
    obj.display(100.0);
    }
}
//运行结果
无参数方法
a=10
a=50,b=60
d=100.0

重载是在一个类中,有相同的函数名称,但形参不同的函。重载的结果,可以让一个程序段尽量减少代码和方法的种类。

参数列表不同包括:个数不同、顺序不同、类型不同。
跟成员方法一样,构造方法也可以重载
声明为final的方法不能被重载。
声明为static的方法不能被重载,但是能够被在此声明。

2.方法重写

    在子类中可以定义与父类中的名字、参数列表、返回值类型都相同的方法,这时子类的方法就叫作覆盖或重写了父类的方法.

假设要在Employee类中也定义一个sayHelloO方法,用它来输出员工信息,定义如下:

public void sayHello{
    System.out.println("hello.i am "+name);
    System.out.println("i am "+age);
}


  该方法就是对Person类的sayHelloo方法的覆盖。如果子类覆盖了超类的方法,在调用相同的方法时,调用的是子类的方法。
  为了遭免在覆盖方法时写错方法头,可以使用@Override注解语法,即在要覆盖的方法前面添加@Override。例如,假设一个Employee类要覆盖Object类的toStringO方法,代码如下:          

@Override
public String toString{
    return "姓名: "+name+"年龄: "+age;
}

   @Override注解表示其后的方法必须是覆盖父类的一个方法。如果具有该注解的方法没有覆盖父类的方法,编译器将报告一个错误。例如,toString如果被错误地写成tosrting,将报告一个编译错误。如果没有使用注解,编译器不会报告错误。使用注解可以避免错误。的关于方法覆盖,有下面两点值得注意:
(l)private方法不能覆盖。只有非private的实例方法才可以覆盖,如果在子类中定义了一个方法在父类中是private的,则这两个方法无关。
(2)父类中static方法可以被继承,但不能被覆盖。如果子类中定义了与父类中的static方法完全一样的方法,那么父类中的方法被隐藏。父类中被隐藏的static方法仍然可以使用“类名.方法名()”形式调用。

   方法重载是在一个类中定义多个名称相同但参数不同的方法。而方法覆盖是在子类中为父类中的同名方法提供一个不同的实现。要在子类中定义一个覆盖的方法,方法的参数和返回值类型都必须与父类中的方法相同。请看下面例子,

//定义一个Parent类
public class Parent{
    public void display(double i){
        System.out.println(i);
    }
}
//定义Parent类的子类child
public class child extends Parent{
   public void display(double i){
     System.out.println(2*i);
    }
}
//测试
public class Demo{
    public static void main (String[] args){
        Child obj=new Child();
        obj.display(10);
        obj.display(10.0);

    }
}
//运行结果
20.0
20.0

 3.super关键字

在子类中可以使用super关键字,用来引用当前对象的父类对象,它可用于下面三种情况:

在子类中调用父类中被覆盖的方法,格式为:

                          super.methodName([paramlist])

在之类中调用父类的构造方法,格式为:

                          supper([paramlist])

在子类中访问父类中被隐藏的成员变量,格式为:

                         super.variableName                                                      

这里,methodName表示要用调用父类中被覆盖的方法名;paramlist表示为方法传递的参数;variableName表示要访问的父类中被隐藏的变量名。                                                                         

package com.demo;
    class super{
        int x,y;
        public super(){
            System.out.println("创建父类对象");
            setXY(5,5);
        }
    public void diaplay setXY(int x,int y){
        this.x=x;
        this.y=y;
    }
    public void display(){
        System.out.println("x= " +x+ ",y= " +y);
    }
    class Sub extends Super{
        int x,z;
        public Sub(){
            this(10,10);
            System.out.println("创建子类对象");
        }
    }
    public Sub(int x,int z){
     super();
     public Sub(){
     this.x=x;
     this.z=z;
        }
    }
    public void diaplay(){
        super.display();
        System.out.println("x- "+x+",y="+y);
        System.out.println("super.x= "+super.x+",super.y="+super.y);
        }
    }
    public class SuperDemo{
        public static void mian(String[] args){
            Sub b=new Snb();
            b.display();
        }
    }
//运行结果
创建父类对象
创建子类对象
x=5,y=5
x=10,y=5
super.x=5,super.y=5

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java是一种非常流行的面向对象编程语言,它的核心概念之一就是类与对象。 类是用来描述具有相同属性和行为的一组对象的模板。可以把类看作是一种自定义的数据类型。在类中,我们可以定义各种属性和方法来描述对象的特征和行为。属性是对象的状态,而方法则是对象的行为。 对象是类的具体实例化,在内存中占有一定的空间。可以把对象看作是类的变量,通过实例化类来创建对象。对象可以访问类中定义的属性和方法,并且每个对象都有自己独立的状态。 通过类和对象的组合使用,我们可以实现面向对象编程的核心思想:封装、继承和多态。 封装是指将数据和操作数据的方法封装在类的内部,隐藏内部实现细节,只提供公共的访问方法。这样可以保证数据的安全性和一致性,提高代码的可维护性和重用性。 继承是指通过已有的类创建新的类,提供新类所具有的属性和方法,并且可以重写或扩展父类的方法。继承可以减少代码的冗余,提高代码的复用性和可扩展性。 多态是指同一类型的对象在调用同一个方法时,可以有不同的行为表现。它通过方法重载方法重写实现。多态可以提高代码的灵活性和扩展性,让我们能够编写更加通用和可复用的代码。 总之,类与对象是Java面向对象编程的基石,它们的灵活组合使用可以让我们编写出高质量、模块化的代码,并且提高了代码的可维护性和可扩展性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值