什么是多态

概念

动态编译:类型:可扩展性

即同一个方法可以根据发送对象的不同而采取不同的行为方式。

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

多态存在的条件

  • 有继承关系

  • 子类重写父类方法

  • 父类引用指向子类对象

注意:多态是方法的多态,属性没有多态性。

instanceof (类型转换) 引用类型,判断一个对象是什么类型

注意事项

  1. 多态是方法的多态,属性没有多态

  2. 父类和子类,有联系 类型转换异常! ClassCastException!

  3. 存在条件:继承关系,方法需要重写,父类引用指向子类对象! Father f1 = new Son();

  4. 重写失效条件:

    • static方法,属于类,它不属于实例

    • final 常量,被固定了

    • private方法

举例

s2左边和右边不一样

 

但依然能输出结果

 

调用s2和s1的方法

 

s1是自己的输出,且重写了s2的方法,因此s2执行的是s1的输出

 

现在Person类中没有eat方法,无法调用

 

代码

//Java-零基础学习/src/oop/demo06/Student
package oop.demo06;

public class Student extends Person {

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

   public void eat() {
       System.out.println("ear");
  }
}

/*
public static void main(String[] args) {

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

       //可以指向的引用类型就不确定了:父类的引用指向子类

       //Student 能调用的方法都是自己的或者继承父类的!
       Student s1 = new Student();
       //Person 父类型,可以指向子类,但是不能调用子类独有的方法
       Person s2 = new Student();
       Object s3 = new Student();

       //对象能执行哪些方法,主要看对象左边的类型,和右边关系不大!
       s2.eat();//子类重写了父类的方法,执行子类的方法
       s1.eat();

   }
*/
//Java-零基础学习/src/oop/demo06/Person
package oop.demo06;

public class Person {

   public void run() {
       System.out.println("run");
  }
}
//Java-零基础学习/src/oop/Application
package oop;

import oop.demo06.Person;
import oop.demo06.Student;

//一个项目应该只存在一个main方法
public class Application {

   public static void main(String[] args) {

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

       //可以指向的引用类型就不确定了:父类的引用指向子类

       //Student 能调用的方法都是自己的或者继承父类的!
       Student s1 = new Student();
       //Person 父类型,可以指向子类,但是不能调用子类独有的方法
       Person s2 = new Student();
       Object s3 = new Student();

       //对象能执行哪些方法,主要看对象左边的类型,和右边关系不大!
       s2.eat();//子类重写了父类的方法,执行子类的方法
       s1.eat();

  }
}
 
posted @   poiuyjoey  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示