一、方法重载(Overload):

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

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

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

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

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

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

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

例1:

 public class TestMethodLoad{
public void test(){
System.out.println("~~没有形参的test方法~~");
}
public void test(String name){
System.out.println("~~带一个形参的test方法~~,参数名为:" + name);
} public static void main(String[] args){
TestMethodLoad t = new TestMethodLoad();
t.test();
t.test("哈喽");
}
}

例2:

 public class TestMethodLoad2{
public void test(String name){
System.out.println("带一个参数的方法,参数是:" + name);
}
public void test(String... msgs){
for(String msg : msgs){
System.out.println("带可变String类型参数的方法,参数是:" + msg);
}
} public static void main(String[] args){
TestMethodLoad2 tl = new TestMethodLoad2();
tl.test("哈喽");
tl.test("123","jkl"); }
}

二、构造器重载:

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

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

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

 public class Monkey{
private String name;
private double weight;
private int age; //提供带两个参数的构造器
public Monkey(String name , double weight){
this.name = name;
this.weight = weight;
} //提供带三个参数的构造器,构造器的作用是用来初始化实例的
public Monkey(String name , double weight , int age){
this(name,weight);
this.age = age;
} public void info(){
System.out.println("这是一只猴子,它的名字是:" + name +
",体重是:" + weight + ",年龄是:" + age);
} public static void main(String[] args){
Monkey m = new Monkey("小金刚",100);
m.info();
Monkey m2 = new Monkey("金刚",300,20);
m2.info();
}
}

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

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

  1、方法重写规则:

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

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

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

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

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

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

注意:

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

疯狂java学习笔记之面向对象(六) - 构造器重载、方法重载和方法重写的更多相关文章

  1. 疯狂java学习笔记之面向对象(一) - 定义类、方法、构造器

    Java面向对象 1.定义类 2.创建对象.调用方法 类和对象: 某一类对象的概念定义. 比如:人类 - 抽象出来的概念(不特指某个人) 对象 - 在类的概念下产生的一个实例,它就是一个对象了. ja ...

  2. 疯狂java学习笔记之面向对象(八) - static和final

    一.static: 1.static是一个标识符: - 有static修饰的成员表明该成员是属于类的; - 没有static修饰的成员表明该成员是属于实例/对象的. 2.static修饰的成员(Fie ...

  3. 疯狂java学习笔记之面向对象(四) - this关键字

    Java中this关键字主要有以下两个方法: 1.this引用 - 可用于任何非static修饰的方法和构造器中,当this用于方法中时,它代表调用该方法的实例/对象;当this用于构造器中时,它代表 ...

  4. 疯狂java学习笔记之面向对象(九) - 抽象和接口

    一.抽象(abstract): 1.抽象类: 使用abstract修饰的类就是抽象类; 相比于普通类抽象类增加了支持抽象方法的功能,但也丢失了创建实例的功能(抽象类中不能创建实例),其他普通类有的抽象 ...

  5. 疯狂java学习笔记之面向对象(二) - 成员变量与局部变量

    Java变量按其作用域可分为:成员变量和局部变量.注意:在Java中是没有全局变量这个概念的 一.成员变量: 成员变量是在类中定义的变量,具体可分为类变量与实例变量--有无static修饰 实例变量的 ...

  6. 疯狂java学习笔记之面向对象(五) - 封装、继承、多态

    一.封装: 封装的概念: - 合理的隐藏:隐藏不想被外界操作的Field.方法.构造器 - 合理的暴露:一般就是希望给别人调用的方法 e.g:显示器(按键暴露出来操作,但实际的东西/细节方法被隐藏起来 ...

  7. 疯狂java学习笔记之面向对象(三) - 方法所属性和值传递

    方法的所属性: 从语法的角度来看:方法必须定义在类中 方法要么属于类本身(static修饰),要么属于实例 -- 到底是属于类还是属于对象? 有无static修饰 调用方法时:必须有主调对象(主语,调 ...

  8. 疯狂java学习笔记之面向对象(七) - super关键字

    super有以下两大作用: 1.起限定作用:强制去访问父类的成员(Field.方法) 2.起调用作用:指定/显示调用父类的某个构造器 super调用规则: 1.子类构造器总会调用父类构造器一次,默认情 ...

  9. Java学习笔记之---面向对象

    Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...

随机推荐

  1. asp.net 短信群发

    protected void Btn_Save_Click(object sender, EventArgs e) { string Contents = this.Txt_SmsContents.T ...

  2. Innodb之表空间转移

    我们可以将数据表转移到其他磁盘,以减弱单个磁盘的IO. 如 1创建一个表空间: 2修改表以使用新的表空间,如果表有大量数据,则会需要一些时间重建:所以会锁表一段时间: Note:会将原有的表空间删除, ...

  3. openfile学习笔记

    Openfiler是在rPath Linux基础上开发的,它能够作为一个独立的Linux操作系统发行.Openfiler是一款非常好的存储管理操作系统,开源免费,通过web界面对 存储磁盘的管理,支持 ...

  4. linux rpm问题:怎样查看rpm安装包的安装路径

      x rpm问题:怎样查看rpm安装包的安装路径 2010-07-12 21:19:15 标签:rpm linux 路径 休闲 职场 rpm -qpl xxxxxx.rpm 1.如何安装rpm软件包 ...

  5. 20145206邹京儒《Java程序设计》第8周学习总结

    20145206 <Java程序设计>第8周学习总结 教材学习内容总结 第十四章 NIO与NIO2 14.1 认识NIO NIO使用频道(Channel)来衔接数据节点,在处理数据时,NI ...

  6. Linux系统启动过程分析

    [原创]Linux系统启动过程分析-wjlkoorey258-ChinaUnix博客http://blog.chinaunix.net/uid-23069658-id-3142047.html 经过对 ...

  7. 【转载】 Python 方法参数 * 和 **

    Python的函数定义中有两种特殊的情况,即出现*,**的形式. 如:def myfun1(username, *keys)或def myfun2(username, **keys)等. 他们与函数有 ...

  8. 【PHP绘图技术&&验证码绘制】

    PHP绘图是比较简单的事情,基本绘图如直线.圆.矩形.弧线.填充矩形.填充扇形.非中文字的打印.中文文字的打印在在下面的代码中会纤细讲解. 需要支持中文的字体,可以到windows自带的字体库中找,并 ...

  9. MVP社区巡讲照片集

    今天MVP社区巡讲在北京利星行微软大厦连同SQL PASS社区合办了一次线下活动,这次互动汇集了在北京大多数的微软MVP,他们都是微软认可的有着各微软产品和技术特长的技术专家,无论是MVP社区巡讲还是 ...

  10. 攻城狮在路上(壹) Hibernate(五)--- 映射一对多关联关系

    关联是有方向的,包含单向关联和双向关联.分别讨论.本文以客户Customer和订单Order来进行讨论:一个Customer有多个Order,每个Order对应一个Customer. Customer ...