一、方法重载(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. hdu1492(约数个数定理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1492 这里先讲一下约数个数定理: 对于正整数x,将其质因分解为 x = pow(p1, a) * po ...

  2. NYOJ题目809摸底

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtEAAAI4CAIAAAAj4CIaAAAgAElEQVR4nO3drXLjTLeG4X0S4TmQYB

  3. CentOS出错You don't have permission to access on this server

    之前配置phpmyadmin的时候,在浏览器上输入http://192.168.8.250/phpmyadmin/ 也遇到了You don't have permission to access on ...

  4. 线性代数 -- Linear Algebra with Applications

    @.如果线性方程组无解,则称该方程组是不相容的(inconsistent). @.如果线性方程组至少存在一个解,则称该方程组是相容的(consistent). @.等价方程组(equivalent s ...

  5. C#关键字ref和out

    using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Di ...

  6. 并发中的Native方法,CAS操作与ABA问题

    Native方法,Unsafe与CAS操作 >>JNI和Native方法 Java中,通过JNI(Java Native Interface,java本地接口)来实现本地化,访问操作系统底 ...

  7. ASP.NET MVC 使用带有短横线的html Attributes(转载)

    转载地址:http://www.nmtree.net/2013/10/25/asp-net-mvc-use-dash-in-html-attributes.html 情景再现 我们常常需要一个文本框来 ...

  8. Validform 学习笔记---代码练习

    上一节主要梳理了validform的基础知识,针对这些基础知识,编写代码的时候,也整理的部分知识,先记录以便后期温习. 验证部分的css @charset "utf-8"; /* ...

  9. POJ3691 DNA repair(AC自动机 DP)

    给定N个长度不超过20的模式串,再给定一个长度为M的目标串S,求在目标串S上最少改变多少字符,可以使得它不包含任何的模式串 建立Trie图,求得每个节点是否是不可被包含的串,然后进行DP dp[i][ ...

  10. ora-01033:oracle initializationg or shutdown in progress 错误提示解决方法

    1.进入CMD,执行set ORACLE_SID=fbms,确保连接到正确的SID:2.运行sqlplus "/as sysdba" SQL>shutdown immedia ...