一、方法重载(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. XStream xml to bean

    <!-- pom.xml --> <dependency> <groupId>com.thoughtworks.xstream</groupId> &l ...

  2. 复制Informational constraints on LUW DB2 v105

    An informational constraint is a constraint attribute that can be used by the SQL compiler to improv ...

  3. 三、jQuery--Ajax基础--Ajax全接触--Ajax在JS中的应用

    Ajax的全称:Asynchronous JavaScript And XML(异步的 JavaScript 和 XML). Ajax不是某种编程语言,是一种在无需重新加载整个网页的情况下能够更新部分 ...

  4. gzip

    gzip -c 将输出写到标准输出上,并保留原文本 gzip * : 把当前目录中的每个文件压缩成.gz文件 [root@NB gzip]# ls mysql-bin. mysql-bin..tar ...

  5. rpm -qc 来查找安装包的配置文件

    rpm -qc elasticsearch /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/jvm.options /etc/elast ...

  6. Spring学习笔记—Spring之旅

    1.Spring简介     Spring是一个开源框架,最早由Rod Johnson创建,并在<Expert One-on-One:J2EE Design and Development> ...

  7. Android - 控件android:ems属性

    Android - 控件android:ems属性http://blog.csdn.net/caroline_wendy/article/details/41684255?utm_source=tui ...

  8. 基于MyEclipse6.5的ssh整合

    1.编写目的 为了学习,为了更好的学习java. 为了让想要学习这个整合的人少走弯路! ! ! 2.实验环境 l MyEclipse6.5 l JBoss4.2.1 l SQL2005 l 数据库脚本 ...

  9. Linux/centos下安装riak

    必备的组件: gccgcc-c++glibc-develmakepam-devel 使用yum安装相关组件 sudo yum install gcc gcc-c++ glibc-devel make ...

  10. Java Hour 66 Spring 相关

    这章简单的来了解下Spring 和 Hibernate 是如何勾搭在一起的. <bean id="sessionFactory" class="org.spring ...