Java面向对象之重写和重载

重载和重写是java中两个重要的方法,这篇文章就是来重点介绍一下java中的重写和重载 。

重载

为什么要重载呢?

重载就是为了方便我们根据不同的需求去调用不同的方法。

什么是重载?

首先 重载的是方法 那需要什么样的条件才能形成重载呢?
1.方法名要相同
2.参数列表不相同(个数,类型,顺序)
3.与访问修饰符和返回值类型无关

 public  void main(String[] args) {
        print(12);
        print("1234");
        print("hello Java!");
    }
    public  void print(int i){      
        System.out.println("打印整型值:"+i);
    }
    public  void print(String s){     //参数的类型不同
        System.out.println("打印字符串类型值:"+s);
    }
    public void print(int s1,String s2){    //参数的数量不同
        System.out.println("打印整型值1"+s1+";字符串类型值2:"+s2);
    }
	public void print(String s2,int s1){    //参数的顺序不同
        System.out.println("打印字符串型值2"+s2+";打印整型值1"+s1);
    }
	void print(int i){      //与访问修饰符无关
        System.out.println("打印整型值:"+i);
    }

注意:重载与返回值类型是否相同无关;两个方法如果仅仅只是因为返回值类型不同,是不能构成重载的。

重写

为什么要重写?

父类中的方法已经无法满足子类中的需求,于是在子类中重写方法覆盖父类中的方法。

什么是重写?

重写(override):也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进 行重新编写 , 返回值和形参都不能改变。即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为。 那重写又需要什么样的条件呢?
1.出现在有子父类的情况下
2.方法名和参数列表都要相同
3.返回值类型相同或者是其子类
4.访问修饰符的权限不能严于父类
5.抛出的一场不能大于父类


//Animal.java
public class Animal {
    String name;
    int age;
 
 	public Animal(){}  //父类无参构造方法
    public Animal(String name, int age) {   //父类有参构造方法
        this.name = name;
        this.age = age;
    }
 
    public void eat() {
        System.out.println(name + "吃饭");
    }
}
//Cat.java
public class Cat extends Animal {       //只有在继承子父类中才有重写的概念
  
  public Cat() {}  //子类无参构造方法
 
    @Override
    public void eat() {      //重写父类中的方法
        System.out.println(name + "吃鱼");
    }
}
 
//Dog.java
public class Dog extends Animal {
    public Dog(){}
 
    @Override
    public void eat(){   	//重写父类中的方法
       System.out.println(name+"吃骨头");
    }
}
//TestAnmal.java
public class TestAnimal {
    // 编译器在编译代码时,并不知道要调用Dog 还是 Cat 中eat的方法
    // 等程序运行起来后,形参a引用的具体对象确定后,才知道调用那个方法
    // 注意:此处的形参类型必须时父类类型才可以
    public static void eat(Animal a) {  //多态
        a.eat();
    }
 
    public static void main(String[] args) {
        Cat cat = new Cat("小黄", 2);
        Dog dog = new Dog("大黄", 3);
        eat(cat);
        eat(dog);
    }
}

重写和重载的区别:

区别点重载重写
参数列表不同相同
返回值类型无关父类相同或是父类的子类
访问修饰符无关不能严与父类
抛出异常不能大于父类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值