java多态的状态,JAVA入门到精通-第12讲-多态:一个引用(类型)在不同情况下的多种状态...

85aebdda458a013ef9fa85add6fa1f56.png

5f7fca720466ff4160de8691560d79bd.png

访问内部属性的公开的方法;

66362c5a4a668a406424053967c9a0d5.png

66e836fd9588ecb9896bea77ce6fdeb9.png

选中属性,自动生成;

d5831a29f7f222b69085fa5d0e6f2b84.png

1fd0e803330826a04ad6acd95f1b8afe.png

这样,没有出现多态;

让JAVA编译器自动去判断时Cat还是Dog?

f23617091b38cfc4bd273709c2ccb95e.png

把动物Animal的引用指向Cat;

多态:

c9cb803bea6f48d8a5f4c919d2e6df70.png

an引用一会儿是猫,一会儿是狗;

会根据等号右边自动判断是猫还是狗的 ;

通过多态,更为方便;

19a1ff6035df197455e9bdb3986ff5b3.png

让一种引用来管理好些个对象;

f226ca0297910690d609d804a6785a26.png

父类需要写cry( ),否则,无法调用;

74801de8cbdaf0f3869475552c4d8d48.png

7fa7ee429f65bbbea163a62af2dade30.png

在Fish中把这份方法showName()给覆盖了;

2144a8805af4c82253d882b31de9aa05.png

如果没有多态,你有几种多态就得写几个feed函数;

有了多态,方法就可以用一个;

b7e62e1e4b8b6d3284b685636ac24cd6.png

6a266d05b42c6f17e3c84735cac3585a.png

好处:将来多出来动物或者食物;下面的代码不需要改变;

让代码更加地灵活;

2f1a897407865b3baf19ff5266131397.png

1ed2dada7c1d4b97105c7126f60a1c1d.png

好处:将来动物,食物在增加的时候有些东西是不需要变化的;

0fca5a81a6ec7c5eb38f4d42925ba07b.png

853b370fb6087bf702faa1b65278e4e0.png

an 就是父类的引用变量;

把子类交给父类;

java面向对象编程(2)--四大特征

多态--概念

所谓多态,就是指一个引用(类型)在不同情况下的多种状态。也可以理解成:多态是指通过指向父类的指针,来调用在不同子类中实现的方法。

实现多态有两种方式:1、继承;2、接口

多态演示[Dome122.java]

//演示继承、方法覆盖、多态

public class Demo122 {

public static void main(String[] args) {

//非多态演示

Cat cat=new Cat();

cat.cry();

Dog dog=new Dog();

dog.cry();

//多态演示

Animal an=new Cat();

an.cry();

an=new Dog();

an.cry();

}

}

//动物类

class Animal{

String name;

int age;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

//动物会叫

public void cry(){

System.out.println("不知道怎么叫");

}

}

//创建Dog子类并继承Animal父类及覆盖cry方法

class Dog extends Animal{

//狗叫

public void cry(){

System.out.println("汪汪叫");

}

}

class Cat extends Animal{

//猫自己叫

public void cry(){

System.out.println("猫猫叫");

}

}

ec72842ed2f0397b77253df779abf13a.png

-------------------------------------------------------------------------------

多重多态演示[Dome123.java]

//演示子类继承父类、方法覆盖、多态方法

public class Demo123 {

public static void main(String[] args) {

//非多态演示

System.out.println("非多态演示:");

Cat cat=new Cat();

cat.cry();

Dog dog=new Dog();

dog.cry();

System.out.println();

//多态演示

System.out.println("多态演示:");

Animal an=new Cat();

an.cry();

an=new Dog();

an.cry();

System.out.println();

//多重多态演示

System.out.println("多重多态演示:");

Master master=new Master();

master.feed(new Dog(),new Bone());

master.feed(new Cat(),new Fish());

}

}

//主人类

class Master{

//给动物喂食物,使用多态,只要写一个方法

public void feed(Animal an,Food f){

an.eat();

f.showName();

}

}

//食物父类

class Food{

String name;

public void showName(){

System.out.println("食物");

}

}

//食物鱼子类

class Fish extends Food{

public void showName(){

System.out.println("鱼");

}

}

//食物骨头子类

class Bone extends Food{

public void showName(){

System.out.println("骨头");

}

}

//动物类Animal父类

class Animal{

String name;

int age;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

//动物会叫

public void cry(){

System.out.println("不知道怎么叫");

}

//动物吃东西

public void eat(){

System.out.println("不知道吃什么");

}

}

//创建Dog子类并extends继承Animal父类及覆盖cry方法

class Dog extends Animal{

//狗叫

public void cry(){

System.out.println("汪汪叫");

}

//狗吃东西

public void eat(){

System.out.println("狗爱吃骨头");

}

}

class Cat extends Animal{

//猫自己叫

public void cry(){

System.out.println("猫猫叫");

}

//猫吃东西

public void eat(){

System.out.println("猫爱吃鱼");

}

}

多态--注意事项:

1、java允许父类的引用变量引用它的子类的实例(对象)

Animal an=new Cat();//这种转换时自动完成的

2、关于类型转换还有一些具体的细节要求,我们在后面还要提,比如子类能不能转换成父类,有什么要求等等...

6db03caa7b85cdf0a753766d65b5c297.png

f75048a4ba27a1ab31dc6c0bcc7c20ab.png

c7ba9f05923c1a68bbb7297403dae931.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值