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条)