关于java多态的那件事

啥是多态?

  • 多态意味着可以一个引用变量可以指向多个实际类型对象,并且程序能够根据对象类型执行不同操作。
  • 多态主要有两种形式:
    1.方法重载:
  • 在一个类中,方法名相同,但是参数列表不同的多个方法被称为方法重载。这不是真正的多态,但是它提供了多种方式来执行类似操作。
    2.方法重写与运行中的多态
  • 当子类继承父类并且重写父类中的方法时,通过父类指向子类引用对象,并且调用该方法时,会执行子类中的方法,而不是父类的方法。
  • 这种多态性在运行时确定,因此也被称为运行时的多态。
    例如:
  • 大学类:小明
    • 小明是一名大学生
    • 小明是一位学生
  • 小明是一个对象,但是拥有两种身份
  • 使用这个身份时
  • 其中子类大学生的身份更加具体
  • 学生类身份比较抽象

转型

  • 基本数据类型的转型
    • 强制转型:
      • int i=1.2//int i=(int)1.2;
      • double d=1.2;int i=(int)d;
    • 自动转型:int i=1000;double d=i;
  • 引用数据类型:类、接口、数组
  • 自动转型:
    • A a=new A();
    • B b=a;
      这两行代码实现的前提是什么?
      答:B是A的父类
    • 一个学生一定是大学生吗?不一定
    • 但一个大学生一定是一个学生
    • 子类创建对象时,对象的地址一般会存在子类类型对应的变量名中
    • A a=new A();//注:a是对象变量名,对象是内存中的一份数据体
    • 子类对象的引用地址也可以存在一个父类类型的对象变量名中
    • A extends B| B b=a
    • 在这里插入图在这里插入图片描述
片描述
  • 子类继承父类时,可以继承父类的属性和方法
    • 子类可以定义自己的属性和方法
    • 子类可以重写父类的方法
    • 子类对象经过转型之后,调用有无变化?
      • 可以调用继承方法,如果继承的方法被子类重写了,那就调用子类重写的方法
      • 父类不能调用子类独有的方法。

以下为示例代码

public class User {
    String name;
    String password;
    int age;
    boolean isVIP;
    boolean isAdmin;
    boolean isUser;

    public void home() {
        System.out.println("欢迎登录XX系统后台");
        System.out.println("这里是您个人主页,用户等级:普通用户");

    }
}

class AdminUser extends User {
    @Override
    public void home() {
        System.out.println("欢迎登录XX系统后台");
        System.out.println("这里是您个人主页,用户等级:管理员");

    }


}

class VIPUser extends User {
    @Override
    public void home() {
        System.out.println("欢迎登录XX系统后台");
        System.out.println("这里是您个人主页,用户等级:会员");

    }


}

class SystemMain {
    public static void login(User user, String pwdIn) {
        if (user.password.equals(pwdIn)) {
            user.home();
        } else {
            System.out.println("密码错误,登录失败!");
        }
    }





    public static void main(String[] args) {
        User user = new User();
        user.password = "123";


        AdminUser admin = new AdminUser();
        admin.password = "123";


        VIPUser vip = new VIPUser();
        vip.password = "123";


        // 分别登录不同类型的用户
        SystemMain.login(user, "123");
        SystemMain.login(admin, "123");
        SystemMain.login(vip, "123");
    }
}

注意:使用继承时,一定要确认子类和父类不在同一个类下,即:user类下不包含admin类和vip类,这两个类是单独出来的,否则会报错!

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值