Java多态的详解

大家好,今天来给大家分享一下Java的多态

Java当中的多态,就是同一方法可以根据发送对象的不同而采用多种不同的行为方式

一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多

Java多态存在的条件:
1.有继承关系
2.子类重写父类方法
3.父类引用子类对象

注意一点:
多态指的是方法的多态,属性没有多态这一说

多态可以实现动态编译,增强可扩展性

新建Application 类

package Demo02;

public class Application {
    public static void main(String[] args) {
        
    }
}

新建Person类

package Demo02;

public class Person {
}

新建student类

package Demo02;

public class student {
}

让student 类 继承Person

package Demo02;

public class student  extends Person {
}

代码实例

package Demo02;

public class Application {
    public static void main(String[] args) {

        //一个对象的实际类型是确定的
      //  new student();   创建对象
        //new Person();

        // 可以指向的引用类型是不确定的,父类的引用指向子类
        student s1 =new student();     //可以很快理解
 //       student student =new student();
        Person S2 =new student();    //父类的引用指向子类的类型
        //因为他俩本来就有继承关系
    //    String S3 =new student();   这样是不行的,因为String和他没有关系
        Object S3 = new student();      //这样也可以,因为Object类是所有类的老祖宗

    }
}

在测试类上写

package Demo02;

public class Application {
    public static void main(String[] args) {

        //一个对象的实际类型是确定的
      new student();  // 创建对象
        //new Person();

        // 可以指向的引用类型是不确定的,父类的引用指向子类
        student s1 =new student();     //可以很快理解
       student student =new student();
        Person S2 =new student();    //父类的引用指向子类的类型
        //因为他俩本来就有继承关系
    //    String S3 =new student();   这样是不行的,因为String和他没有关系
        Object S3 = new student();      //这样也可以,因为Object类是所有类的老祖宗
      S2.run();      //S2的类型是Person

          }
}

在父类上写

package Demo02;

public class Person {
    public void run(){
      System.out.println("run");
    }
}

显示结果

在这里插入图片描述
子类student继承Person,子类重写父类的方法

package Demo02;

public class Application {
    public static void main(String[] args) {

        //一个对象的实际类型是确定的
      new student();  // 创建对象
        //new Person();

        // 可以指向的引用类型是不确定的,父类的引用指向子类
        student s1 =new student();     //可以很快理解
   //    student student =new student();
        Person S2 =new student();    //父类的引用指向子类的类型
        //因为他俩本来就有继承关系
    //    String S3 =new student();   这样是不行的,因为String和他没有关系
        Object S3 = new student();      //这样也可以,因为Object类是所有类的老祖宗
      S2.run();    //属于Person类
       s1.run();      //属于student类
        //student  这个类是子类,Person 这个类是父类
        //同时我们这个程序里也是继承的关系
        //子类重写父类的方法,执行子类的方法

          }
}

这个时候,Person类不用动

package Demo02;

public class Person {
    public void run(){
      System.out.println("run");
    }
}

在student类当中写方法


    package Demo02;

public class student  extends Person {    //继承
    public void  eat(){       //写方法
        System.out.println("eat");
    }

    @Override
    public void run() {
        System.out.println("run");
    }
}

package Demo02;

public class Application {
    public static void main(String[] args) {

        //一个对象的实际类型是确定的
      new student();  // 创建对象
        //new Person();

        // 可以指向的引用类型是不确定的,父类的引用指向子类
        //student 可以调用的方法都是自己或继承父类的
        
        student s1 =new student();     //可以很快理解
   //    student student =new student();
        Person S2 =new student();    //父类的引用指向子类的类型
        //Person 父类型,可以指向子类,但是不可以调用子类独有的方法
        //因为他俩本来就有继承关系
    //    String S3 =new student();   这样是不行的,因为String和他没有关系
        Object S3 = new student();      //这样也可以,因为Object类是所有类的老祖宗
      S2.run();    //属于Person类
       s1.run();      //属于student类
        //student  这个类是子类,Person 这个类是父类
        //同时我们这个程序里也是继承的关系
      //       S2.eat()     S2无法对eat实现调用    
        s1.eat();      //s1可以实现对eat的调用
        //因为S2的类型是Person,而eat是写在student类当中的
        //对象可以执行那些方法,主要看对象左边的类型,和右边关系不大
        
        
          }
}
 多态的注意事项:
 1.多态是方法的多态,属性没有多态
 2.需要有继承的关系,之间要有联系
 比如说,person类和 string 这两个东西本身就没有关系
 3.存在关系,继承关系,方法需要重写,父类引用指向子类对象
 
 4.可是有些方法不可以重写:
 static    方法   属于类,不是方法
 final    常量 
 3.private    ,这是私有方法,也不可以重写

好了,Java的多态就讲到这里,谢谢大家

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思诚代码块

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值