多态三种引用方式

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("没有这个购买的宠物");

}

}

}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值