1.多态性的理解:可以理解为一个事物的多种形态。
2.何为多态性:
对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)
===============多态直接引用=============
class Animal2{
public void eat() {
System.out.println("动物正在吃...");
}
}
class Dog2 extends Animal2{
public void run() {
System.out.println("大黄正在跑...");
}
@Override
public void eat() {
System.out.println("大黄正在吃...");
}
}
public class Test2 {
public static void main(String[] args) {
Animal2 animal2 = new Dog2();
animal2.eat(); //父类引用指向子类对象,优先调用子类重写的方法
}
}
=============多态以传参方式出现=============
class JiaoTongTool{
public void run() {
System.out.println("交通工具在运转...");
}
}
class Bike extends JiaoTongTool{
@Override
public void run() {
System.out.println("自行车运转: 轮子转啊转,以每小时50公里速度~");
}
}
class Car extends JiaoTongTool{
@Override
public void run() {
System.out.println("汽车运转:以每小时100公里速度前进~");
}
}
class Teacher{
//重写 VS 重载
//重载: 在同一个类中,方法名相同,参数个数或类型不同
//重写:在继承关系中,子类返回值,方法名,参数类型和父类完全一致,且子类权限大于等于父类
//-----------重载方法----------
/*
public void start(Bike bike) {//Bike bike = new Bike();
bike.run(); //自行车的运转
}
public void start(Car car) {
car.run(); //自行车的运转
}*/
public void start(JiaoTongTool tool) {
tool.run(); //不要看谁调的,要看谁传的
}
}
public class Test {
public static void main(String[] args) {
Teacher teacher = new Teacher();
teacher.start(new Bike()); //1.老师开自行车
teacher.start(new Car()); //2.老师开汽车
//new Bike().run(); //等价Teacher的start方法里面bike对象的调用
}
}
============多态以返回值形式出现=============
案例:主人购买动物,选择购买编号:1.买狗 2.买鸟
class Animal{
public void bark() {
System.out.println("动物在叫..");
}
}
class Dog extends Animal{
@Override
public void bark() {
System.out.println("狗在叫..");
}
}
class Bird extends Animal{
@Override
public void bark() {
System.out.println("鸟在叫...");
}
}
class Master{
public Animal buy(int num) {
switch (num) {
case 1:
return new Dog(); //多态以返回值方式出现
case 2:
return new Bird();
default:
return null;
}
}
}
public class Test {
public static void main(String[] args) {
System.out.println("请输入你要购买的宠物: 1.狗 2.鸟");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
Master master = new Master();
//多态以返回值方式出现
Animal animal = master.buy(num); //Animal a = new Dog();
if(animal!=null) {
animal.bark(); //调重写方法
}else {
System.out.println("没有这个购买的宠物");
}
}
}