• java


    多态(Polymorphism):

    同一个对象体现出的不同形态,将一种行为体现出不同效果。

    实现:父类引用指向子类

    animal

    public class Person extends Animal{

    }

    Animal a = new Person();

    此时a能调用person中的方法

    如果父类和子类有相同的属性,调用父类的。

    如果子类中重写了父类的方法,则调用的是子类中重写的方法。

    如果父类想调用子类独有的方法,需要强制转化

    Person  p = (Person)a;

    package Polymorphism;
    
    public class Animal {
    
        int age = 1;
    
        public void setAge(){
            age = 10;
            System.out.println("Animal类中的setAge方法");
        }
    
    }
    package Polymorphism;
    
    public class Person extends Animal {
    
        int age = 2;
        String name;
    
        public void setName(){
            String name = "aaa";
            System.out.println("Person类中的setName方法");
        }
    
        public void getName(){
            System.out.println("Person类中的getName方法:name = " + name);
        }
    
        public void setAge(){
            age = 20;
            System.out.println("Person类中的setAge方法");
        }
    
        public void getAge(){
            System.out.println("Person类中的getAge方法:age = " + age);
        }
    }
    package Polymorphism;
    
    import java.net.SocketTimeoutException;
    import java.util.Scanner;
    
    public class Test {
    
        public static void main(String[] args){
            Animal a = new Person();//多态
    
            System.out.println(a.age);//如果父类和子类有相同的属性,调用父类的。
    
            a.setAge();//如果子类中重写了父类的方法,则调用的是子类中重写的方法。
    
            Person p = (Person) a;//如果父类想调用子类独有的方法,需要强制转化
            p.getAge();
    
    
            Object o = new Person();
            Animal aa = null;
            //避免转换异常,可以使用instanceof判断,不能转换(没有继承关系)会直接报错不能编译,如果是 a instanceof b, 且a是b的对象或者子类对象,会返回true
            if(o instanceof Animal){   //o new的是一个Person对象,是animal的子类
                System.out.println("o与Animal可以匹配");
                aa = (Animal)o;//向下强制转换,寻找方法中从Person向父类寻找,Person中有setAge的重写,所以执行的是Person的
                // 能执行的方法和属性是从Animal开始向父类找(必须是Animal或者其父类定义过),执行的方法和属性是从定义时new的Person开始向父类找,有重写的优先运行重写的。
            }
            else{
                System.out.println("o与Animal不匹配");
            }
            System.out.println(a.age);
            aa.setAge();
    
            Object oo = new Animal();
    
            if(oo instanceof Person){  //oo声明的是Animal对象,是Person的父类,所以返回false
                System.out.println("oo与Person可以匹配");
            }
            else{
                System.out.println("oo与Person不匹配");
            }
    
        }
    }

    多态的应用:

    比如银行取号时,父类为public abstract  class person,子类为不同类型的客户,这样银行可以统一处理客户,而不同客户可以重写他们各自独立的方法。

    package Polymorphism.bank;
    
    public abstract class Customer {
        protected String name; //子类可以直接使用
    
        public abstract void come();
    }
    package Polymorphism.bank;
    
    public class VIPCustomer extends Customer{
    
        public VIPCustomer(String name){
            this.name = name;
        }
    
        public void come(){
            System.out.println("VIP客户" + name + "开始办理业务。");
        }
    }
    package Polymorphism.bank;
    
    public class CommenCustomer extends Customer{
        public CommenCustomer(String name){
            this.name = name;
        }
    
        public void come(){
            System.out.println("普通客户" + name + "开始办理业务。");
        }
    }
    package Polymorphism.bank;
    
    public class Bank {
    
        public void dealwithCustomer(Customer c){
            c.come();
        }
    
        public static void main(String[] args){
            Bank b = new Bank();
            Customer vip = new VIPCustomer("王健");  //利用多态对客户进行分类,调用他们重写的方法。
            Customer com = new CommenCustomer("张益");
    
            b.dealwithCustomer(vip);
            b.dealwithCustomer(com);
        }
    }
  • 相关阅读:
    .Net 控制台动态刷新使用
    VS 将!=转换成 ≠
    C# 自定义Html分页
    .NET MVC ModelBinder基本使用
    C# 重启电脑 程序自启动
    ASP.NET JsonResult返回日期格式及首字母大写解决
    java快速排序代码实现
    系统高可靠的设计需要考虑哪些方面
    sentinel源码学习--transport模块
    TiDB学习笔记分享--存储篇
  • 原文地址:https://www.cnblogs.com/clamp7724/p/11606429.html
Copyright © 2020-2023  润新知