一、方法重载(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. python基础——模块

    python基础——模块 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文 ...

  2. C 工厂模式 还有其他的模式

    http://blog.csdn.net/feixiaoxing/article/details/7081243

  3. VAssistX的VA Snippet Editor的类注释和函数注释

    title:类注释shortcut:=== /******************************************************** [DateTime]:$YEAR$.$M ...

  4. fork与vfork的区别与联系

    fork()与vfock()都是创建一个进程,那他们有什么区别呢?总结有以下三点区别: 1. fork ():子进程拷贝父进程的数据段,代码段 vfork ( ):子进程与父进程共享数据段 2. fo ...

  5. NYOJ题目74小学生算术

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsYAAAI0CAIAAACRUHjwAAAgAElEQVR4nO3dO3LbyroG0DsJ5RqIYg

  6. jquery学习笔记-----插件开发的编写总结

    一.对jQuery对象的扩展 ;(function($){ $.fn.extend(  { fun1:abc,fun2:1bc … } ) })(jQuery) 这里采用立即执行模式,即不用调用也能执 ...

  7. SQL索引及视图常用语法

    ALTER TABLE department ADD INDEX dept_name_idx (name); SHOW INDEX FROM department \G ALTER TABLE dep ...

  8. PHP面向对象编程之深入理解方法重载与方法覆盖(多态)

    这篇文章主要介绍了PHP面向对象编程之深入理解方法重载与方法覆盖(多态)的相关资料,需要的朋友可以参考下: 什么是多态? 多态(Polymorphism)按字面的意思就是"多种状态" ...

  9. 2-04使用SQL语句创建数据库

    下面是创建数据库的一些语法: USE master--指向当前使用的数据库 GO--批处理的标志 CREATE DATABASE E_Market--创建E_market数据库 ON PRMARY-- ...

  10. php array_intersect() 和 array_diff() 函数

    在PHP中,使用 array_intersect 求两个数组的交集比使用 array_diff 求同样两个数组的并集要快. 如果要求数组 $a 与数组 $b 的差集的个数,应该使用 count($a) ...