一.重载与重写
1.重载:指的是在同一个类里面,有几个方法,方法名是完全一样的,但是,参数类型或者参数个数不一样,这样会构成重载
例子:
package com.hanqi.maya.model; public class jisuanqi { public void add(String s ){ System.out.println(); } public void add(int a , int b){ System.out.println(a + b); } public void add(double a , double b){ System.out.println(a + b); } public void add(int a ,double b){ System.out.println(a + b); } }
2.重写:一般指的是在继承关系当中,一个类继承另一个类,子类中的成员方法跟父类中的成员方法方法名、参数类型、参数个数完全一样,我们就叫做子类的方法重写了父类的方法
将父类的方法重新定义
--在子类中可以根据需要从父类中集成来的方法进行重写
--重写方法必须和被重写的方法具有相同的方法名, 参数列表 参数类型和返回类型
--重写方法不能使用比被重写方法更严格的访问权限
例子a:
package com.hanqi.maya.model; public class Animal { public void scream(){ System.out.println("动物的叫声!"); } }
package com.hanqi.maya.model; public class Tiger extends Animal { }
package com.hanqi.maya.main; import com.hanqi.maya.model.Tiger; public class Text { public static void main(String[] args) { Tiger t = new Tiger(); t.scream(); } }
例子b:
package com.hanqi.maya.model; public class Animal { public void scream(){ System.out.println("动物的叫声!"); } }
package com.hanqi.maya.model; public class Tiger extends Animal { public void scream(){ System.out.println("老虎哇哇的叫"); } }
package com.hanqi.maya.main; import com.hanqi.maya.model.Tiger; public class Text { public static void main(String[] args) { Tiger t = new Tiger(); t.scream(); } }
例子3:toString方法的重写
package com.hanqi.maya.model; public class Animal { public void scream(){ System.out.println("动物的叫声!"); } }
package com.hanqi.maya.model; public class Tiger extends Animal { private String name; private String sex; public Tiger(String name, String sex) { super(); this.name = name; this.sex = sex; } public void scream(){ System.out.println("老虎哇哇的叫"); } //官方版的方法 @Override public String toString() { return "Tiger [name=" + name + ", sex=" + sex + "]"; } /*自己写的方法 * public String toString(){ String str = "name:" + name +",sex:" + sex; return str; }*/ }
package com.hanqi.maya.main; import com.hanqi.maya.model.Tiger; public class Text { public static void main(String[] args) { Tiger t = new Tiger("小小", "女"); System.out.println(t.toString()); } }
例子4:equals方法的重写
public boolean equals(Object obj)
- 指示其他某个对象是否与此对象“相等”。
equals
方法在非空对象引用上实现相等关系:- 自反性:对于任何非空引用值
x
,x.equals(x)
都应返回true
。 - 对称性:对于任何非空引用值
x
和y
,当且仅当y.equals(x)
返回true
时,x.equals(y)
才应返回true
。 - 传递性:对于任何非空引用值
x
、y
和z
,如果x.equals(y)
返回true
,并且y.equals(z)
返回true
,那么x.equals(z)
应返回true
。 - 一致性:对于任何非空引用值
x
和y
,多次调用 x.equals(y) 始终返回true
或始终返回false
,前提是对象上equals
比较中所用的信息没有被修改。 - 对于任何非空引用值
x
,x.equals(null)
都应返回false
。
Object
类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值x
和y
,当且仅当x
和y
引用同一个对象时,此方法才返回true
(x == y
具有值true
)。注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
二.判断是否存在多态关系的三个条件:
- 继承
- 重写
- 父类的引用指向子类的对象(父类只提供方法)
例子1:
package com.hanqi.maya.model; public class Tools { public void chaidongxi(){ System.out.println("没有功能"); } }
package com.hanqi.maya.model; public class luosidao extends Tools { public void chaidongxi(){ System.out.println("螺丝刀拧螺丝"); } }
package com.hanqi.maya.model; public class Chanzi extends Tools { public void chaidongxi(){ System.out.println("铲土..."); } }
package com.hanqi.maya.text; import com.hanqi.maya.model.Tools; public class Main { public static void main(String[] args) { Tools t = new Tools(); t.chaidongxi(); } }
package com.hanqi.maya.text; import com.hanqi.maya.model.Tools; import com.hanqi.maya.model.luosidao; public class Main { public static void main(String[] args) { Tools t = new luosidao(); t.chaidongxi(); } }
package com.hanqi.maya.text; import com.hanqi.maya.model.Chanzi; import com.hanqi.maya.model.Tools; public class Main { public static void main(String[] args) { Tools t = new Chanzi(); t.chaidongxi(); } }
例子2:
package com.hanqi.maya.model; public class Ball { public double radius; public String pinpai; public Ball(){} public Ball(double radius, String pinpai){ this.radius = radius; this.pinpai = pinpai; } public void fillAir(){ System.out.println("用嘴吹"); } }
package com.hanqi.maya.model; public class BasketBall extends Ball { public BasketBall(double radius, String Pinpai) { super(radius, Pinpai); } public void fillAir(){ System.out.println("打气筒"); } }
package com.hanqi.maya.model; public class FootBall extends Ball { public FootBall(double radius, String Pinpai) { super(radius, Pinpai); } @Override public void fillAir() { System.out.println("用气泵"); } }
package com.hanqi.maya.model; public class Main { public static void main(String[] args) { Ball ball = new Ball(30 , "阿迪达斯"); Ball ball1 = new BasketBall(35 , "耐克"); Ball ball2 = new FootBall(25 , "阿迪达斯"); ball.fillAir(); ball1.fillAir(); ball2.fillAir(); } }
- 自反性:对于任何非空引用值