重载+重写+多态笔记

重载+重写+多态笔记,第1张

重载+重写+多态笔记

方法重载

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);
	}
}



欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/5694950.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存