java中多态的的知识点_Java中多态的知识点理解

1.面向对象的三个主要特征

1.封装:外部无法访问,保护类中的操作不会被外部访问

2.继承:扩展类的功能 子类继承父类的方法

3.多态:是Java中最重要的点。要想实现多态性,必须要有封装、继承、父类对象引用子类对象,向上向下转型。

在成员变量中,父类对象引用子类对象的时候,调用的是父类中的成员变量

/**

* 在成员变量中,父类引用对象指向子类对象的时候,调用的是父类中的变量

* @author hasee

*

*/

public class Demo02 {

public static void main(String[]arg){

Animal02 a=new Dog02();

System.out.println(a.age);

}

}

class Animal02{

int age=10;

public void eat(){

System.out.println("动物在"+"eat");

}

}

class Dog02 extends Animal02{

int age=20;

public void eat(){

System.out.println("狗在"+"eat");

}

}

输出结果:

32380e9f8cd8445483aadea7c4a49984.png

在成员方法中,父类对象引用子类对象的时候,调用的是子类中的成员方法(前提是子类覆写了父类的方法)

// 在成员方法中,父类引用对象指向子类对象的时候,调用的是子类中的方法

public class Demo01 {

public static void main(String[]arg){

/*Animal animal=new Animal();

animal.eat();*/

Animal01 a=new Dog01();//父类声明引用对象,指向子类对象

a.eat();//父类调用子类的方法

}

}

class Animal01{

public void eat(){

System.out.println("动物在"+"eat");

}

}

class Dog01 extends Animal01{

public void eat(){

System.out.println("狗在"+"eat");

}

public void aaa(){

System.out.println("狗在"+"eat");

}

}

输出结果:

562d64eb366784c22ed84384894b76bb.png

在静态方法中,父类对象引用子类对象的时候,调用的是父类中的静态方法

/**

* 在静态成员方法中,父类引用对象指向子类对象的时候,调用的是父类中的静态方法

* @author hasee

*

*/

public class Demo03 {

public static void main(String[]arg){

Animal03 a=new Dog03();

a.say();

}

}

class Animal03{

int age=10;

public static void say(){

System.out.println("Aniam:"+"我是谁");

}

}

class Dog03 extends Animal03{

int age=20;

public static void say(){

System.out.println("Dog:"+"我是狗");

}

}

输出结果:

9b1cbb0de88034f2b7f2e1dd9dda4e0e.png

向上转型:向上转型后父类的引用所指向的属性是父类的属性,如果子类重写了父类的方法,那么父类引用指向的或者调用的方法是子类 的方法,这个叫动态绑定。

向下转型:向下转型就是父类中没有这个方法,而子类中有这个方法,需要向下转型调用这个方法(前提是要先向上转型,不然会报错)

/**

* 向上转型和向下转型

*向上转型不要强制转型

*向上转型后父类的引用所指向的属性是父类的属性,

*如果子类重写了父类的方法,那么父类引用指向的或者调用的方法是子类的方法,这个叫动态绑定。

*

*但是如果非要使用子类的方法那就需要向下转型,只有先经过向上转型的对象才能继续向下转型。不然需要使用instanceof进行判断

*

*/

public class Demo04 {

public static void main(String[]arg){

Animal04 a=new Dog04();

a.eat();//向上转型 自动转

if(a instanceof Dog04){//首先需要判断一下

Dog04 dog = (Dog04) a;//向下转型,强制转

dog.play();

}

}

}

class Animal04{

int age=10;

public void eat(){

System.out.println("动物在"+"eat");

}

public static void say(){

System.out.println("Aniam:"+"我是谁");

}

}

class Dog04 extends Animal04{

int age=20;

public void eat(){

System.out.println("狗在"+"eat");

}

public static void say(){

System.out.println("Dog:"+"我是狗");

}

public void play(){

System.out.println("狗仔完游戏");

}

}

运行结果:

eca1105f96882dde17af483040434e9a.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值