
1.方法的重载
指多个方法带有不同的参数,使用相同的方法名。
与返回值和修饰符没有关系
只需一个方法名,就能拥有多个不同的功能。
2.重载的特点:
含有的参数数目不同
含有的参数类型不同
含有的参数顺序不同
3.例如:
int pm(int a,int b,int c)
int pm (float a,float b)
float pm (int a,float b)
int pm (float a,int b)
4.代码展示
//创建三个方法,第一个方法求最大整数,第二个方法求最大双精度数,第三个方法求三个双精度中的最大值
public class TestMethodOverloading {
public static void main(String[] args) {
System.out.println("The maximum of 3 and 4 is " + max(3,4));
System.out.println("The maximum of 3.0, 5.4 and 5.4 is " + max(3.0,5.4));
System.out.println("The maximum of 3.0 and 10.14 is " + max(3,5.4,10.14));
}
public static int max(int num1,int num2) {
if(num1 > num2)
return num1;
else
return num2;
}
public static double max(double num1,double num2) {
if(num1 > num2)
return num1;
else
return num2;
}
public static double max(double num1, double num2, double num3) {
return max(max(num1,num2),num3);
}
}
方法履写
什么是方法重写?
1.子类根据需求从父类继承的方法进行重新编写
2.重写是,可以使用super.方法的方式来保留父亲的方法
3.构造方法不能被重写
方法重写的规则
- 方法名相同
- 参数列表相同(数量,顺序,数据类型)
- 如果有返回值,返回值相同或者是其子类
- 访问权限不能严于父类
- 父类的静态方法不能被重写为非静态方法,反之父类的非静态方法不能被重写为静态方法
- 子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态方法(静态方法中无法使用super、this)
- 父类的私有方法不能被子类重写(private修饰的)
1.多态概述
现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。
Java中多态的代码体现在一个子类对象,即可以给这个子类引用变量赋值,又可以给这个子类的父类(接口)变量赋值。
如 Student类可以是Person类的子类,那么一个 Student对象可以值给一个Student类型的引用,也可以赋值给一个Person类型的引用。
2.多态的体现
- 父类引用变量可以指向子类对象
- 多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。
- 在使用多态后的父类引用变量调用方法时,会调用子类重写后的法。
3.多态的定义和使用格式
多态的定义
(1)父类的引用变量指向子类对象
父类类型 变量名 = new 子类类型(); 变量名.方法名();
(2)普通类多态定义
父类 变量名 = new 子类();
如:class Fu()
class Zi extends Fu { }
//类的多态使用
Fu f = new Zi();
(3)抽象类多态定义
抽象类 变量名 = new 抽象类子类();
如:abstract class Fu {
public abstract void method();
}
class Zi extends Fu {
public void method(){
System.out.println("重写父类抽象方法");
}
}
Fu fu = new Zi();
(4) 接口多态定义
接口 变量名 = new 接口实现类();
如:interface Fu {
public abstract void method();
}
class Zi implements Fu {
public void method() {
System.out.println("重写接口抽象方法");
}
}
//接口的多态使用
Fu fu = new Zi();
4.instanceof关键字
instanceof关键字用于判断某个对象是否属于某种数据类型,比如:学生的对象属于学生类,学生的对象也属于人类
使用格式:
boolean b = 对象 instanceof 数据类型
5.多态的转型
多态的转型分为上转型和下转型两种:
- 向上转型:当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程
父类类型 变量名 = new 子类类型(); 如: person p = new Student();
- 向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用转为子类引用,这个过程是向下转型。如果直接创建父类对象,是无法向下转型的!
子类类型 变量名 = (子类类型) 父类类型的变量; 如: Student stu = (Student) P; //这里变量P指向Student对象
6.多态试例
abstract class Animal{
abstract void eat();
abstract void sleep();
}
class Dog extends Animal{
void eat(){
System.out.println("猪吃饲料");
}
void sleep(){
System.out.println("猪睡觉");
}
}
class Cat extends Animal{
void eat(){
System.out.println("猫吃鱼");
}
void sleep(){
System.out.println("猫侧着睡觉");
}
}
class AnimalTool{
private AnimalTool(){}
public static void useAnimal(Animal a){
a.eat();
a.sleep();
}
}
public class DuoTaiDemo1 {
public static void main(String[] args) {
Animal a = new Dog();
AnimalTool.useAnimal(a);
System.out.println("---------");
Animal b = new Cat();
AnimalTool.useAnimal(b);
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)