首页 > 编程语言 >Javase多态(对多态的理解、多态的体现)

Javase多态(对多态的理解、多态的体现)

时间:2023-01-27 10:31:10浏览次数:42  
标签:子类 体现 多态 Person Javase 父类 方法 public


前言

刚开始学Java的时候对多态这个概念一直没弄太明白,随着后面的学习无意中都在用着多态,又看了一些文章决定整理一下!


举例

创建一个Person类,Student类继承Person类,并分别创建子类特有、父类特有、子类和父类共有的方法。

Person类

public class Person {
private String name;
private Integer age;
public void eat(){
System.out.println("我饿了!");//子类和父类共有的方法
}
public void tired(){//父类特有的方法
System.out.println("我累了!");
}
}

Student类

public class BoyStudent extends Person {
public void eat(){//子类和父类共有的方法
System.out.println("我要吃饭!!");
}
public void study(){//子类特有的方法
System.out.println("我正在学习!!");
}
}

public class GirlStudent extends Person {
public void eat(){//子类和父类共有的方法
System.out.println("我要吃饭饭!!");
}
public void study(){//子类特有的方法
System.out.println("我正在学习习!!");
}
}

测试类

public class Test {
public static void main (String [] args){
Person person=new BoyStudent();
person.eat();
person.tired();
((Student) person).study();
}
}

Javase多态(对多态的理解、多态的体现)_c++

(1)形式上:父类的引用指向子类的对象。例如:

Person person=new Student();

Person person为父类的引用,后面为具体的子类

在jvm虚拟机中大概是这样的:

Javase多态(对多态的理解、多态的体现)_jvm_02

(2)当调用子类和父类共有的方法的时候,会执行子类重写后的方法

(3)当调用父类特有的方法的时候会执行父类的方法。

(4)当调用子类的特有的方法的时候要向下转型,否则,是无法调用子类的特有的方法的。

缺点:

它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的。

对多态的理解

  • 接口的多种不同的实现既为多态。
  • 将父类对象设置为一个或更多个子类对象(前面为父类对象,new 后面的为子类对象)
Person person=new BoyStudent();
Person person=new GirlStudent();
Person person=new ...Student();
Person person=new ...Student();
...
  • 程序中定义的引用类型的变量调用的方法在编程的时候并不确定,当处于运行期间才确定(编译看左边,运行看右边)。这样不用修改源码就可以把变量绑定到不同的类实例上,让程序拥有了多个运行状态,这就是多态。
public class Worker extends Person {
public void eat(){
System.out.println("我饿了,我要吃饭!!");
}
public void work(){
System.out.println("今天继续搬砖!!");
}
}
public class Student extends Person {
public void eat(){
System.out.println("我要吃饭!!");
}
public void study(){
System.out.println("我正在学习!!");
}
}

也就是说,在定义父类的引用的时候运行的时候就可以指向两种不同的对象,调用eat方法后就会产生不同的效果,也就是说用同样的对象调用同样的方法但是做了不同的事情。

三要素

继承或接口实现(先决条件,没有继承就不会有子类对父类方法的重写)

重写(不同的子类对父类的方法进行重写之后才会体现父类的引用的多态)

父类引用指向子类对象(这是多态的具体实施)

例如:创建一个Person类作为父类,学生类和教师类作为子类。将学习作为子父类的公共的方法,子类可以重写父类的方法并且可以有自己特有的方法。父类的引用指向子类对象,此时,父类的引用只能调用父类特有的方法或者子父类共有的字类重写后的方法,调用子类特有的方法的时候需要向下转型。

多态的体现

Javase多态(对多态的理解、多态的体现)_c++_03

Set <Student> students=new HashSet<Student>();
students.add(stu1);

Set<Student> students1=new LinkedHashSet<Student>();
students1.add(stu2);

HashSet类和LinkedHashSet类都实现了同一个接口Set,在上面的程序中,Set接口的引用,分别指向了不同的对象,调用名字相同但是功能不同的方法,体现出了多态。

其它

一般认为Java中的函数重载是一种静态多态,因为他需要在编译期决定具体调用哪个方法。而重写是只有在运行时期确定到底运行哪一个子类中的方法


标签:子类,体现,多态,Person,Javase,父类,方法,public
From: https://blog.51cto.com/u_14519396/6023994

相关文章

  • 面向对象-多态-1
    面向对象-多态-11.3多态的好处和弊端多态的好处:提高了程序的扩展性.具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操......
  • 06-JavaSE:面向对象编程
    面向过程的思维模式面向过程的思维模式是简单的线性思维,思考问题首先陷入第一步做什么、第二步做什么的细节中。这种思维模式适合处理简单的事情,比如:上厕所。如果面对......
  • Day09 - 子类父类多继承多层继承多态
    1.子类中访问父类中的私有属性和私有方法如果想使用父类中的私有属性和私有方法,那么就需要在父类中,为这些私有的属性和方法,提供相应的公有的接口方法来间接访问2.......
  • 动力节点javaSE笔记
    目录调用方法:类名.方法名(其中在一个类中调用,类名可以省略)方法重载条件:面向对象三大特征:类--->[实例化]--->对象(实例)对象--->[抽象]--->类方法体内的变量是局部变......
  • mt_Day7: 多态、内部类、一些常用API
    多态同类型对象,执行同一个行为,会表现出不同的特征多态成员访问特点:方法调用:编译看左边,运行看右边变量调用:编译看左边,运行也看左边(多态侧重行为多态)publicabstrac......
  • java 多态学习笔记
    因为在想去一个家乡的小国企,每个月五六千块钱或许也不错,所以懈怠了学习。但是论语中有说:取乎其上,得乎其中;取乎其中,得乎其下;取乎其下,则无所得矣。如果我想着只是进一个小地......
  • c++入门篇之C++ 多态
    多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数......
  • j2ee、JavaSE、MVC、Spring
    JavaEE(JavaEnterpriseEdition)java企业版,多用于企业级开发,包括web开发等等。一般用于开发JavaWeb应用程序,初级的一般是用JSP(JavaServerPages)+servlet+JavaBean来开发的,......
  • 面向对象三大特性之——多态
    面向对象三大特性之——多态一、引言此篇文章来自一个初学Java不久的学生,内容的用词、深度、广度甚至部分理解不够到位,再加上Markdown语法的不熟练,所以排版不够美观。......
  • 重载重写、封装继承多态、String、==和equlas、Integer
    (1)重载和重写的区别:1.重载:方法名相同,参数类型、个数、顺序不同,返回值、访问修饰符可以不同;发生在编译时;2.重写:方法名、参数列表必须相同;返回值、异常范围小于等于父类,访问修......