疯狂java学习笔记之面向对象(六) - 构造器重载、方法重载和方法重写
2014-12-15 22:19
309 查看
一、方法重载(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); } }
相关文章推荐
- 构造器、方法重载、继承、方法重写、自动转型、多态课堂笔记
- 第二节类的继承、方法的重载、方法的重写、对象的引用和构造器
- 方法的重载(overloading)与重写(overriding)
- java初学者实践教程15-方法的重载与重写
- C# 方法签名 重载(overload) 重写(override)
- C#中继承实现父类方法、重写、重载
- 对虚方法、重写、重载的认识
- 方法的重载(overloading)与重写(overriding)
- C#中隐藏(new)和方法重写(override)和重载(overload)的区别
- 静态方法可以重载但是不可以重写
- c# 重载WndProc,实现重写“最小化”的方法
- java中方法的重载与重写的区别
- java学习中重写与重载方法的区别(转自:小鸟的天空)
- C#中隐藏(new)和方法重写(override)和重载(overload)的区别
- 方法重载和方法重写的区别(转载)
- 类以及方法的重载、隐藏与重写
- 全新java初学者实践教程15(java SE5.0版)--jdk5中方法的重载与重写
- C#基础篇 重写与重载,以及其中设计的虚方法和抽象方法的使用和区别
- JAVA 方法重载,方法重写,继承
- 一个初学者对虚方法、重写、重载的认识