博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
疯狂java学习笔记之面向对象(六) - 构造器重载、方法重载和方法重写
阅读量:4915 次
发布时间:2019-06-11

本文共 3532 字,大约阅读时间需要 11 分钟。

一、方法重载(Overload):

  Java允许同一个类中定义多个同名方法,只要形参不一样就可以,如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,则被成为方法重载(两同一异).

  同时这这里我们需要注意以下两点:

    A.方法重载与返回值类型没有任何关系;

    B.方法重载与是否有static修饰没有任何关系.

  那我们如何才能确定到底调用的哪个方法呢?

    A.主调者:明确是谁在调用这个方法,是类还是对象

    B.方法名和形参:确定调用哪个方法(由方法名和形参共同决定)

例1:

1 public class TestMethodLoad{ 2     public void test(){ 3         System.out.println("~~没有形参的test方法~~"); 4     } 5     public void test(String name){ 6         System.out.println("~~带一个形参的test方法~~,参数名为:" + name); 7     } 8  9     public static void main(String[] args){10         TestMethodLoad t = new TestMethodLoad();11         t.test();12         t.test("哈喽");13     }14 }

 

例2:

1 public class TestMethodLoad2{ 2     public void test(String name){ 3         System.out.println("带一个参数的方法,参数是:" + name); 4     } 5     public void test(String... msgs){ 6         for(String msg : msgs){ 7             System.out.println("带可变String类型参数的方法,参数是:" + msg); 8         } 9     }10 11     public static void main(String[] args){12         TestMethodLoad2 tl = new TestMethodLoad2();13         tl.test("哈喽");14         tl.test("123","jkl");15 16     }17 }

 

二、构造器重载:

  构造器可以认为它是个特殊的方法:无需声明返回值类型,如果声明了返回值类型则变成普通方法;

  构造器的作用:构造器并不是创建对象,而是初始化实例,严格来说对象是new出来的;

  构造器重载:完全类似于方法重载 -- 两同(同一个类、方法名相同)-- 一异(形参列表不同)

 

1 public class Monkey{ 2     private String name; 3     private double weight; 4     private int age; 5  6     //提供带两个参数的构造器 7     public Monkey(String name , double weight){ 8         this.name = name; 9         this.weight = weight;10     }11 12     //提供带三个参数的构造器,构造器的作用是用来初始化实例的13     public Monkey(String name , double weight , int age){14         this(name,weight);15         this.age = age;16     }17 18     public void info(){19         System.out.println("这是一只猴子,它的名字是:" + name +20             ",体重是:" + weight + ",年龄是:" + age);21     }22 23     public static void main(String[] args){24         Monkey m = new Monkey("小金刚",100);25         m.info();26         Monkey m2 = new Monkey("金刚",300,20);27         m2.info();28     }29 }

 

三、方法重写(Override)/方法覆盖:

  方法重写是用在子类与父类之间的,而方法重载是用于同一个类的,当子类从父类那里继承得到的方法,不能真正满足子类需求的时候,子类可以重写父类的方法。

  1、方法重写规则:

  两同:方法名相同、形参列表相同;

  两小:子类重写方法的返回值类型必须比父类方法的返回值类型更小或相等;子类重写方法的声明抛出异常必须比父类方法的声明抛出异常更小或相等

  一大:子类重写方法的访问权限必须比父类更大或相等

 

  2、@Override:强制要求子类必须重写方法标识符

  作用:要不编译的时候则出错,防止重写父类方法出错;让编译器执行更严格的检查,要求被修饰的方法必须是重写父类的方法

 

1 public class Bird{2     public void fly(){3         System.out.println("这是一只在填空飞翔的鸟啊~~");4     }5 }
1 public class TuoNiao{2     public void fly(){3         System.out.println("鸵鸟太笨了,只能在地上跑了!");4     }5     public static void main(String[] args) {6         TuoNiao tn = new TuoNiao();7         tn.fly();//因为子类重写了fly方法,所以最终调用的是子类重写后的方法8     }9 }

 

注意:

1 public class GoldMonkey extends Monkey{ 2     //子类会从父类那里获得所有Field与方法,不重写父类构造器的话默认会继承父类的空构造器,若父类没有空构造器则报错 3     public GoldMonkey(String name , double weight , int age){ 4         this.name = name; 5         this.weight = weight; 6         this.age = age; 7     } 8    9     public static void main(String[] args){10         GoldMonkey gm = new GoldMonkey("小金",300,12);11         //调用从父类那里继承得到的方法12         gm.info();//若子类没有重写info方法,默认则继承父类的info方法13     }14 15     //当子类从父类那里继承得到的方法,不能真正满足子类需求的时候,子类可以重写父类的方法16     //protected void info(){} //错误 子类重写方法必须比父类的访问权限更大或相等。17 18     public void info(){19         //extends是继承了父类的所有方法和属性,所以它有name、weight、age等属性20         //但由于父类访问权限为private 所以不能访问,此时需要修改父类Field属性为Protected/默认21         System.out.println("这是一只金丝猴,名字是:" + name + ",体重是:" + weight + ",年龄是:" + age);22     }  23 }

 

转载于:https://www.cnblogs.com/dtest/p/4166014.html

你可能感兴趣的文章
Ping pong(树状数组经典)
查看>>
Mysql 语句优化
查看>>
记一次面试
查看>>
例子:进度条
查看>>
二叉树
查看>>
kubernetes安装记录
查看>>
easyui 回车搜索
查看>>
SAP 使用SQL Trace(ST05)
查看>>
P4777 【模板】扩展中国剩余定理(EXCRT)&& EXCRT
查看>>
[PowerShell]Quote in String
查看>>
Workpress搭建经验 (ubuntu16.04+nginx+mysql+php7)
查看>>
Java List详解
查看>>
选择排序SelectSort
查看>>
一个案例深入Python中的__new__和__init__
查看>>
链接,光标,DHTML,缩放
查看>>
Flask博客类登录注册验证模块代码(十四)
查看>>
LFS、BLFS、ALFS、HLFS的区别
查看>>
Java的MD5加密和解密
查看>>
Unity3D接入移动MM支付SDK(强联网)的问题
查看>>
Accepting PayPal in games(完整的Paypal在Unity的支付)
查看>>