关于java多态的理解笔记(java多态的理解和使用 )

java多态的是一个比较抽象的概念,虽然感觉懂了但是一直不能讲清楚,偶然发现一段比较容易理解多态的代码,可以体现出多态的优势,在这里记录分享总结一下。

什么是多态

多态形式

多态性,是面向对象中最重要的概念,在Java中的体现形式是:父类的引用指向子类的对象。

什么是多态?

多态是同一个行为具有多个不同表现形式或形态的能力。

多态中成员访问特点

方法调用:编译看左边,运行看右边。

变量调用:编译看左边,运行也看左边。(多态侧重行为多态

多态的前提和体现

有继承/实现关系

有方法重写

有父类引用指向子类对象

优势和使用场景:

在多态形式下,右边对象可以实现组件化切换,

举个例子

//定义一个Animal类 class Animal { //Animal有一个跑的方法 public void run() { System.out.println("Animal会跑"); } } //定义一个Animal的子类,猫类 class Cat extends Animal { @Override public void run() { System.out.println("Cat会跑"); } //写一个Cat特有的方法 public void eatFish() { System.out.println("Cat正在吃Fish"); } } //写一个测试类 public class Test { public static void main(String[] args) { //我们创建一个Cat对象并执行他的run方法是肯定没问题的 Cat cat = new Cat(); cat.run(); //多态的形式我们可以用一个Animal的变量去接受一个Cat对象 Animal animalCat = new Cat(); animalCat.run(); } }

可以看到虽然我们用Animal去接受了一个Cat类,但是调用run方法时执行的是Cat重写的run方法而不是Animal的run方法

优势

便于扩展和维护。可以实现类与类之间的解耦。

劣势:

多态下不能使用子类的特有功能

下面介绍一个容易理解的应用场景

需求:

创建一个Person、Student、Teacher三个类,Person是父类并且实现Comparable接口并重写compareTo方法,Student和Teacher是Person的子类。

创建一个测试类在测试类中写一个比较年龄的静态方法。

写一个Person类并实现Comparable重写compareTo方法

public class Person implements Comparable<Person> { private String username; private int age; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student{" + "username='" + username + ''' + ", age=" + age + '}'; } @Override public int compareTo(Person o) { return this.age-o.age; } }

写一个Student类继承Person类

public class Student extends Person { }

写一个Teacher类继承Person类

public class Teacher extends Person{ }

写一个测试类并且在测试类中写一个静态的年龄比较方法

public class Test { public static void main(String[] args) { //创建一个Student对象 Student student = new Student(); student.setUsername("小明"); student.setAge(20); //创建一个Teacher对象 Teacher teacher = new Teacher(); teacher.setUsername("刘老师"); teacher.setAge(35); Comparable maxAge = getMaxAge(student, teacher); System.out.println(maxAge); } //创建一个静态的比较年龄的方法 //传入两个Comparable实现类对象 //返回一个Comparable实现类对象 public static Comparable getMaxAge(Comparable a, Comparable b){ int result = a.compareTo(b); //如果result<0,则c1比c2小; //如果result>0,则c1比c2大; //如果result==0,则c1和c2一样大; if (result>=0){ return a; }else{ return b; } } }

执行结果

这个年龄的比较方法就使用了多态的形式,我们可以传Student类Teacher类,只要两个被比较的类都属于同一个父类,那么就可以直接调用这个静态方法比较。

发布于 2021-12-08 21:54:33
收藏
分享
海报
0 条评论
32
上一篇:华为手机忘记锁屏密码解决办法(华为手机密码忘了怎么开锁) 下一篇:投影仪有几种显示技术(投影仪的工作原理)
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码